2016-09-07 3 views
0

Я нашел несколько похожих вопросов, но ни один из них не попал в то, что я искал. Допустим, у меня есть массив из 10 значений для фруктов:VB.net - группировка идентичных значений, затем обработка результата

fruit(1) = "apple" 
fruit(2) = "orange" 
fruit(3) = "banana" 
fruit(4) = "cherry" 
fruit(5) = "peach" 
fruit(6) = "" 
fruit(7) = "" 
fruit(8) = "" 
fruit(9) = "" 
fruit(10) = "" 

теперь у меня есть заявление, в котором говорится, что фрукты (6) = «яблоко», что делает массив:

fruit(1) = "apple" 
fruit(2) = "orange" 
fruit(3) = "banana" 
fruit(4) = "cherry" 
fruit(5) = "peach" 
fruit(6) = "apple" 
fruit(7) = "" 
fruit(8) = "" 
fruit(9) = "" 
fruit(10) = "" 

Я хочу иметь суб, который будет группировать подобные предметы и хранить его только один раз. Итак,

fruit(1) = "2 x apple" 
fruit(2) = "orange" 
fruit(3) = "banana" 
fruit(4) = "cherry" 
fruit(5) = "peach" 
fruit(6) = "" 
fruit(7) = "" 
fruit(8) = "" 
fruit(9) = "" 
fruit(10) = "" 

, а затем в следующий раз, когда я добавлю яблоко, оно переходит в «3 x яблоко» и так далее.

так в псевдо-код я хочу его

look for duplicate values 
count how many duplicates 
alter the original item 
delete all but the newly altered entry 

, что это самый простой и самый элегантный способ сделать это в vb.net? есть ли способ сделать это без LINQ?

+4

Вы можете использовать словарь (Of String, Integer) где ключ фрукты и значение это счет. Просто проверьте, существует ли ключ, если да, то увеличивайте счет. Кстати, массивы начинаются с индекса 0 не 1. –

+0

@the_lotus Вы можете уйти с индексированием массивов в 1 или 0 с помощью VB.NET, в зависимости от того, как вы объявляете массив - если вы «Dim fruit (10) As Integer 'вы получите массив, который идет от' fruit (0) 'to' fruit (10) ', вероятно, лучше всего быть совместимым с остальной частью .NET. –

ответ

0

@the_lotus правильно, вы можете использовать словарь

Dim fruits As New Dictionary(Of String, Integer) 

    Sub AddFruit(fruitname As String) 
     If fruits.ContainsKey(fruitname) Then 
     fruits.Item(fruitname) += 1 
     Else 
     fruits.Add(fruitname, 1) 
     End If 
    End Sub 

А потом вернуться

Function NumberOfFruit(fruitname As String) As String 
     Return fruits.Item(fruitname) & " x " & fruitname 
    End Function 
Смежные вопросы