2014-11-19 2 views
1

У меня есть две различные массивы для моей форме следующим образом:Как петля удалить весь экземпляр значения из того же массива?

int[] X = { 14, 19, 24, 28, 33 }; 
int[] Y = { 90, 131, 132, 150, 170 }; 

И я могу удалить одно значение из обоих массивов (тот же номер индекса) с помощью:

int maxValue = Y[0]; 
for (int i = 1; i < Y.Length; i++) 
{ 
     if (Y[i] > maxValue) 
     maxValue = Y[i]; // max value in the array. 

} 

if (maxValue < 100)          
{ 
    int indexY = IndexOfInt(Y, maxValue); 
    Y = Y.Except(new int[] { maxValue }).ToArray(); 
    List<int> Z = X.ToList(); 
    Z.RemoveAt(indexY); 
    X = Z.ToArray(); 
} 

static int IndexOfInt(int[] arr, int value) //finds the index number 
     { 
      for (int i = 0; i < arr.Length; i++) 
      { 
       if (arr[i] == value) 
       { 
        return i; 
       } 
      } 
      return -1; 

     } 

Код выше возвращает:

int[] X = { 19, 24, 28, 33 }; 
int[] Y = { 131, 132, 150, 170 }; 

Как я могу идти о и удалить несколько экземпляров одного и того же значения, позволяет сказать

int[] X = { 14, 19, 24, 28, 33 }; 
int[] Y = { 90, 90, 132, 150, 170 }; 

Я предполагаю, что это должен быть цикл while, но просто не может получить петлю или концепцию. Речь идет не об избежании дубликатов. Его об удалении всех значений <100. Я хочу, чтобы избавиться от значений, которые меньше, чем 100 из X массива из, например:

int[] Y = { 90, 90, 132, 150, 170 }; 

должен быть

int[] Y = { 132, 150, 170 }; 

И потому, что мы удаляем X[0]X[1] мы должны удалить Y[0]Y[1]

int[] X = { 24, 28, 33 }; 

Как я должен использовать этот массив для создания Chart в моем f ОРМ. Надеюсь, что это ясно для Why.

+2

Использует 'List ' вариант для вас? Потому что это будет намного легче манипулировать, чем то, что вы делаете с этим массивом 'int []'. –

+0

@Grant Winney Да 'Список ' is fine – envyM6

+0

Как насчет HashSet ? Или даже SortedSet ? (http://msdn.microsoft.com/en-us/library/dd412070(v=vs.110).aspx) Если вы хотите избежать дубликатов, это кажется хорошим вариантом. –

ответ

2

Я пытаюсь удалить экземпляры значений, которые ниже, чем 100 в Y и соответствующие значения которых имеет одинаковое число индексов в X. т.е. мой код удаляет Y [ 0] и X [0]

следующий код получает индексы всех элементов в Y, которые меньше, чем 100 (минус те показатели, которые не существуют в X, предполагая, что это возможно для X быть короче, чем Y), затем удаляет элементы на всех этих индексированных позиций из обоих X и Y:

var X = new List<int> { 14, 19, 24, 28, 33 }; 
var Y = new List<int> { 90, 90, 132, 150, 170 }; 

var indexes = Y.Select((element, index) => new {element, index}) 
       .Where(item => item.element < 100 
           && item.index < X.Count) 
       .Select(item => item.index) 
       .OrderByDescending(i => i) 
       .ToList(); 

foreach (var index in indexes) 
{ 
    X.RemoveAt(index); 
    Y.RemoveAt(index); 
} 

В коллекции будут в конечном итоге с {24, 28, 33} и {132, 150, 170} в них.

+0

@Grant no Я пытаюсь удалить экземпляры значений, которые ниже 100 в 'Y', и соответствующие значения, которые имеют одинаковый номер индекса в' X'. т.е. мой код удаляет 'Y [0]' и 'X [0]' – envyM6

+1

Works ... Но я должен был сделать это, чтобы создать «Chart» 'int [] A = X.ToArray();' 'int [] B = Y.ToArray();' 'int Z = A.Length;' 'for (int i = 0; i envyM6

+0

Я исправил его по-другому, добавив дополнительное предложение в оператор LINQ 'Where' (' && item.index

2

Как насчет Distinct<TSource> method?

int[] Y = { 90, 90, 132, 150, 170 }; 
Y = Y.Distinct().ToArray(); 
Console.Write("Distinct values: "); 
foreach(int d in Y) 
{ 
    Console.Write("{0} ",d); 
} 
Console.WriteLine(); 

Результирующий выход: Distinct values: 90 132 150 170

+0

, но вы не удаляли индекс в 'X'list. – Default

+0

@ Edmund, который не будет делать ... поскольку я должен использовать 'Y.Length' и' X.Length' в моем проекте, и ваш код вернет '4' для' Y.Length', и то, что я пытаюсь выполнить, что он должен вернуть 132 150 170 и '4' для' Y.Length' ps: это решение 'WinForm'. – envyM6

+3

@ envyM6 Вы продолжаете упоминать, что это WinForms, но ваша размещенная проблема не имеет ничего общего с WinForms. Это всего лишь код C#. – LarsTech

Смежные вопросы