Seleccionando elementos alternativos de una matriz C #

Tengo un array statsname como

apple X banana Y Kiwi z 

Necesito poner la manzana, el plátano y el kiwi en una matriz de Frutas y X, Y y Z en una matriz llamada alfabetos.

¿Algún mecanismo simple de C # para eso por favor?

Utilice IEnumerable.Where sobrecarga que proporciona el índice.

 var fruits = statsname.Where((s, i) => i % 2 == 0).ToArray(); var alphabets = statsname.Where((s, i) => i % 2 != 0).ToArray(); 

Robado de Cómo obtener elementos alternativos usando Enumerable en C #

 var fruits = myArray.Where((t, i) => i % 2 == 0).ToArray(); var alphabets = myArray.Where((t, i) => i % 2 == 1).ToArray(); 

Si he entendido, cuestionar correctamente lo que quieres es muy simple: quieres poner los fruits en una variedad de fruits y lo mismo para los alfabetos y aparecen alternativamente en el nombre de la statsname así que:

 for(int i=0,j=0;i 

LINQ simple:

 List list = new List() { "apple", "X", "banana", "Y", "Kiwi", "z" }; var result = list.Select((l, i) => new { l, i }) .GroupBy(p => pi % 2) .Select(x => x.Select(v => vl).ToList()) .ToList(); 

Entonces tienes una lista de listas:

Resultado de linq

 list fruits = new List(); list alphabet = new List(); for (int i = 0; i < array.Length; i++) { if (i % 2 == 0) fruits.Add(array[i]); else alphabet.Add(array[i]); } 

Entonces puedes simplemente hacer. .ToArray en las listas

 string[] rawarray = new string [] {"Apple","X" .....}; string[] Fruites = new string[rawarray.Length/2+1]; string[] Alphabets = new string[rawarray.Length/2]; For(int i=0; i 

utilizando solo Arrays :

  var array = new string[] { "apple", "X", "banana", "Y", "Kiwi", "z" }; var fruit = new string[array.Length]; var alphabet = new string[array.Length]; for(var i = 0,j = 0; i < array.Length / 2; i++, j += 2) { fruit[i] = array[j]; alphabet[i] = array[j + 1]; } 

Podrías hacer un iterador que simplemente omita cualquier otro elemento. La idea es tener una “vista” de una colección, enumerable especial que devolverá solo algunos de los elementos:

  static IEnumerable everyOther( IEnumerable collection ) { using( var e = collection.GetEnumerator() ) { while( e.MoveNext() ) { yield return e.Current; e.MoveNext(); //skip one } } } 

Puede usar System.Linq.Skip para omitir el primer elemento.

 string[] words = "apple X banana Y Kiwi z".Split(); var fruits = everyOther( words ); var alphabets = everyOther( words.Skip(1) ); 

Solo .ToArray() como una nueva colección o llame a .ToArray() o .ToList() en ellos:

 foreach( string f in fruits ) Console.WriteLine( f ); string[] anArray = fruits.ToArray(); //using System.Linq 

Ahora tienes lo que necesitas.

Los iteradores son métodos que yield return , consulte Iteradores (Guía de progtwigción de C #) . Esta es una característica muy fuerte del lenguaje. Usted puede:

  • omitir elementos
  • decorar elementos
  • cambio de orden
  • concatenar secuencias (ver System.Linq.Concat )

Aquí hay un código de trabajo, con suerte esto será útil para usted:

 using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ReadFile { class Program { static void ReadFile(string filePath, List custumerNames, List phoneNumbers) { string line = string.Empty; var fileStream = new StreamReader(filePath); bool isPhoneNumber = true; while ((line = fileStream.ReadLine()) != null) { if (isPhoneNumber) { phoneNumbers.Add(Convert.ToInt32(line)); isPhoneNumber = false; } else { custumerNames.Add(line); isPhoneNumber = true; } } fileStream.Close(); } static void Main(string[] args) { Console.WriteLine("Started reading the file..."); List custumersNamesList = new List(); List custumersPhonesNumbers = new List(); ReadFile("SampleFile.txt", custumersNamesList, custumersPhonesNumbers); //Assuming both the list's has same lenght. for (int i = 0; i < custumersNamesList.Count(); i++) { Console.WriteLine(string.Format("Custumer Name: {0} , Custumer Phone Number: {1}", custumersNamesList[i], Convert.ToString(custumersPhonesNumbers[i]))); } Console.ReadLine(); } } } 
Intereting Posts