équivalent Java List.toArray

équivalent Java List.toArray - C#/.NET managed - Programmation

Marsh Posté le 02-04-2004 à 21:59:34    

voilà j'ai un ArrayList et j'aimerais tout récupéré sous forme de string[]
 
en java, j'aurais fait
 

Code :
  1. List words = new ArrayList();
  2. /* faire semblant de travailler */
  3. return (String[]) words.toArray( new String[0] );


 
mais là en C#, je bloque ... ArrayList.ToArray(Type) me file un Array et je sais pas vraiment quoi en faire, et ArrayList.ToArray() un object[] évidement pas castable ...  
 
biensur, je cherche une solution élégante et rapide, pas l'allocation d'un tableau à la main et cast+recopie pour chaque élément ...

Reply

Marsh Posté le 02-04-2004 à 21:59:34   

Reply

Marsh Posté le 02-04-2004 à 22:02:49    

ben euh ...  
 

Code :
  1. return (string[])words.ToArray(typeof(string));


 
ou words est un ArrayList

Reply

Marsh Posté le 02-04-2004 à 22:04:33    

ça marche la convertion Array -> [] ?

Reply

Marsh Posté le 02-04-2004 à 22:06:05    

oué
 
edit : ou alors je sais pas comment mon code compile depuis un an [:meganne]


Message édité par HappyHarry le 02-04-2004 à 22:06:34
Reply

Marsh Posté le 02-04-2004 à 22:06:50    

youhou, merci ... je capte pas trop ce qu'est Array ... à ben si je suis bête, merci du coup de main ... j'ai un peu de mal, ça n'est pas référencé dans les membres, par contre, quand on lit la définition, ben ça coule de source :D

Reply

Marsh Posté le 02-04-2004 à 22:07:14    

[:spamafote]

Reply

Marsh Posté le 02-04-2004 à 22:09:37    

bah j'avais pas compris ce qu'était vraiment Array et donc qu'on pouvait le caster

Reply

Marsh Posté le 02-04-2004 à 22:11:29    

ben j'sais pas avec quel IDE tu codes, mais l'aide sur ce truc dans visual studio est assez claire, enfin j'avais trouvé ce truc assez facilement [:spamafote]

Reply

Marsh Posté le 02-04-2004 à 22:11:55    

je code avec JEdit et je suis sous Linux avec mono

Reply

Marsh Posté le 02-04-2004 à 22:12:45    

ouais bon voila quoi [:ddr555]
 
tiens t'as une gentoo toi non ?

Reply

Marsh Posté le 02-04-2004 à 22:12:45   

Reply

Marsh Posté le 02-04-2004 à 22:13:30    

non Debian SID
j'ai autre chose à faire de mon temps CPU (Seti/Boinc :whistle:)

Reply

Marsh Posté le 02-04-2004 à 22:16:14    

rah merde, la derniere fois que j'ai voulu merger mono ca a planté :/

Reply

Marsh Posté le 02-04-2004 à 22:17:30    

j'ai pas la dernière version 0.31 avec debian, mais ça fonctionne bien.

Reply

Marsh Posté le 02-04-2004 à 22:21:55    

j'ressayerai a l'occasion

Reply

Marsh Posté le 02-04-2004 à 22:22:50    

tu sais s'il exite quelque chose de standard comme le enumerate de python
 
c'est à dire que tu peux faire un foreach et tu as 2 valeurs
 
object value;
int index;
 
?

Reply

Marsh Posté le 02-04-2004 à 22:25:16    

j'crois pas nan
 
y a un GetEnumerator() si tu veux [:spamafote]
 
mais pas de truc comme ca, du moins si je comprends bien

Reply

Marsh Posté le 02-04-2004 à 22:27:32    

enfin tu ne sais pas avoir l'index quand tu fais un foreach quoi

Reply

Marsh Posté le 02-04-2004 à 22:36:58    

HappyHarry a écrit :

enfin tu ne sais pas avoir l'index quand tu fais un foreach quoi

c'est ça qui est bête :D
enfin bon, j'écrirai un wrapper moi même

Reply

Marsh Posté le 02-04-2004 à 23:08:59    

Code :
  1. using System.Collections;
  2. public sealed class Enumerate : IEnumerable
  3. {
  4. private sealed class EnumerateEntry : IEnumerator
  5. {
  6.  private long index = 0;
  7.  private readonly IEnumerator backend;
  8.  public EnumerateEntry(IEnumerator backend)
  9.  {
  10.   this.backend = backend;
  11.  }
  12.  public object Current
  13.  {
  14.   get
  15.   {
  16.    return this;
  17.   }
  18.  }
  19.  public bool MoveNext()
  20.  {
  21.   this.index++;
  22.   return this.backend.MoveNext();
  23.  }
  24.  public void Reset()
  25.  {
  26.   this.index = 0;
  27.   this.backend.Reset();
  28.  }
  29.  public long Index
  30.  {
  31.   get
  32.   {
  33.    return this.index;
  34.   }
  35.  }
  36.  public object Item
  37.  {
  38.   get
  39.   {
  40.    return this.backend.Current;
  41.   }
  42.  }
  43. }
  44. private readonly IEnumerable backend;
  45. public Enumerate(IEnumerable backend)
  46. {
  47.  this.backend = backend;
  48. }
  49. public IEnumerator GetEnumerator()
  50. {
  51.  return new EnumerateEntry(this.backend.GetEnumerator());
  52. }
  53. public static void Main(string[] args)
  54. {
  55.  foreach(EnumerateEntry e in new Enumerate(args))
  56.  {
  57.   System.Console.WriteLine("{0} -> {1}", e.Index, e.Item);
  58.  }
  59. }
  60. }

t'en penses quoi?


Message édité par Taz le 02-04-2004 à 23:10:48
Reply

Marsh Posté le 02-04-2004 à 23:13:03    

ma foi, ca me semble pas trop trop mal :jap:

Reply

Marsh Posté le 02-04-2004 à 23:14:50    

ben j'accepte toute critique

Reply

Marsh Posté le 02-04-2004 à 23:16:24    

j'suis plus en état, mes yeux se ferment ;)

Reply

Marsh Posté le 02-04-2004 à 23:24:26    

j'ai regardé de plus pres, je ne crois pas avoir quoi que ce soit a redire
 
j'vais meme me garder ca sous le coude (flemme de le refaire au cas ou :D )
 
edit : ah si ! c'est inadmissible ! :o  
y a pas de System.Console.ReadLine() a la fin du main pour que le pauvre utilisateur de VS que je suis n'aie pas besoin de le rajouter pour que la fenetre DOS reste ouverte :whistle:


Message édité par HappyHarry le 02-04-2004 à 23:26:43
Reply

Marsh Posté le 03-04-2004 à 01:25:42    

j'ai un petit souci là : j'ai une classe ou tout est static : un membre static privé et synchronisé et 3/4 fonctions statiques qui utilisent ce membre. comment je peux faire pour parce que des gens s'amusent à instancier ma classe ? non pas que ça soit dangereux, ça ne sert juste à rien puisqu'elle est vide

Reply

Marsh Posté le 03-04-2004 à 01:41:30    

Taz a écrit :

voilà j'ai un ArrayList et j'aimerais tout récupéré sous forme de string[]
 
en java, j'aurais fait
 

Code :
  1. List words = new ArrayList();
  2. /* faire semblant de travailler */
  3. return (String[]) words.toArray( new String[0] );


 

rien à voir avec le topic, mais passe un array de la longueur de ta Collection quand tu fais ça, tant qu'a faire ;)
(voir l'implementation de toArray pour l'interet)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 03-04-2004 à 01:48:56    

yep, je sais, je gache un peu mais bon, c'est tellement plus court :D

Reply

Marsh Posté le 03-04-2004 à 02:03:56    

words.size() [:spamafote]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 03-04-2004 à 02:06:19    

cai long à écrire :D
 
et puis si c'est déjà prévu, pourquoi je le ferais ?

Reply

Marsh Posté le 03-04-2004 à 02:19:56    

ben regarde l'implementation tu verras la difference... (me rappelle plus en fait mais bon)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 03-04-2004 à 02:23:59    

attends, si le code fait pas ça, y a un gros problème non ?
 
si (taille(tableau_donné) < taille(this))
  alors tableau_donné = allouer(taille(this));
fin si;
 
copier(tableau_donné, data(this), taille(this));
return tableau_donné;
 
 
 
d'ailleurs je les trouve ou les sources ?


Message édité par Taz le 03-04-2004 à 02:24:23
Reply

Marsh Posté le 03-04-2004 à 02:26:21    

ben dans ton jdk [:spamafote]
 
(oui il le fait, mais jsais plus pq j'ai pas le code sous la main là mais me semble que y'a une gross difference si tu passes la bonne taille directement)
(et arrete de me faire douter bordel :o)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 03-04-2004 à 02:38:40    

j'ai pas les sources dans mon sdk :o et j'ai franchement envie de me ramasser le binaire de merde de sun tout ça pour qu'il me ponde un tar.gz ... (je suis entrain de d/l)
 
 
(et j'ai dépuceler mon blog http://advogato.wimbo.org/person/TazForEver/)

Reply

Marsh Posté le 03-04-2004 à 02:49:15    

Code :
  1. public Object[] toArray(Object a[]) {
  2.         if (a.length < size)
  3.             a = (Object[])java.lang.reflect.Array.newInstance(
  4.                                 a.getClass().getComponentType(), size);
  5. System.arraycopy(elementData, 0, a, 0, size);
  6.         if (a.length > size)
  7.             a[size] = null;
  8.         return a;
  9.     }

c'est pas violent quoi :o
 
(edit : j'ai d/l .e .Z pour sparc, c'est la seule arch avec .tar :o)


Message édité par Taz le 03-04-2004 à 02:51:17
Reply

Marsh Posté le 03-04-2004 à 14:33:41    

bah ça fait un peu de reflection pour rien quoi [:spamafote]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 03-04-2004 à 18:02:19    

http://advogato.wimbo.org/person/TazForEver/
bon je m'y colles, parce que j'envisages pas un foreach sans des choses un peu avancées :D

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed