2015-06-17 4 views
-6

Так что есть много строк в моем «BIGLIST», которые содержат несколько условий, как это: цвета, страна, город, хороший/плохой, день, утро/день/вечер/ночьКаков наилучший способ организовать множество данных, которые содержат несколько условий?

есть:

5 цветов

5 стран

5 город

2 хорошо/плохо

7 дней

4 утро/день/вечер/ночь

Так, 5 * 5 * 5 * 2 * 7 * 2 = 3500 возможностей

Некоторые примеры моих данных:

green england london good sunday evening

red thenetherlands amsterdam bad monday night

blue america newyork bad tuesday morning

Итак, теперь я хочу сортировать КАЖДУЮ возможность в списке. Итак, если у вас есть 2x эта возможность в моем БИГЛИСТЕ: blue america newyork bad tuesday morning, список: «blueamericanewyorkbadtuesdaymorningList» .count вернется 2.

Теперь, я не хочу делать 3500 списков с другим именем. И ТАКЖЕ, если я хочу сортировать BIGLIST, это была моя идея сделать это до сих пор: Это хороший способ сделать это? есть ли более простые способы?

List<string> colorlist = new List<string>(); 
colorlist[0] = "blue"; 
colorlist[1] = "red"; 
//etc 
for (int i = 0;i<BIGLIST;i++) 
{ 
    for (int j=0;j<colorlist.count;j++) 
    { 
     if(BIGLIST[i].contains(colorlist[j])) 
     { 
      //etc 
     } 
    } 
} 
+1

Не уверен, чтобы понять: почему вы не создать класс со свойствами «цвет», «страна» , "город" и т. д.? –

+0

«2» - это результат, которого вы хотите достичь? – fubo

+0

'Список colorlist = новый Список (); colorlist [0] = "синий"; colorlist [1] = "red"; 'это не сработает ... Это не Javascript .. Вы должны добавить элементы. colorlist.Add ("синий"); –

ответ

1

Вы можете организовать ваши данные следующим образом:

class Program { 
    static void Main(string[] args) { 
     List<Criteria> list = new List<Criteria>() { 
      new Criteria(Color.green, Country.england, Town.london, GoodBad.good, DayOfTheWeek.sunday, Daytime.evening), 
      new Criteria(Color.red, Country.thenetherlands, Town.amsterdam, GoodBad.bad, DayOfTheWeek.monday, Daytime.night), 
      new Criteria(Color.blue, Country.america, Town.newyork, GoodBad.bad, DayOfTheWeek.tuesday, Daytime.morning), 
     }; 


     Console.WriteLine("- Native sorting:"); 
     list.Sort(); 
     foreach(var criteria in list) { 
      Console.WriteLine(criteria); 
     } 
     Console.WriteLine(); 
     Console.WriteLine("- By Color:"); 
     IOrderedEnumerable<Criteria> byColor = list.OrderBy(c => c.Color); 
     foreach(var criteria in byColor) { 
      Console.WriteLine(criteria); 
     } 
     Console.WriteLine(); 
     Console.WriteLine("- By Country:"); 
     IOrderedEnumerable<Criteria> byCountry = list.OrderBy(c => c.Country); 
     foreach(var criteria in byCountry) { 
      Console.WriteLine(criteria); 
     } 
     Console.WriteLine(); 
     Console.WriteLine("- By Town:"); 
     IOrderedEnumerable<Criteria> byTown = list.OrderBy(c => c.Town); 
     foreach(var criteria in byTown) { 
      Console.WriteLine(criteria); 
     } 
     Console.WriteLine(); 
     Console.WriteLine("- By Good:"); 
     IOrderedEnumerable<Criteria> byGood = list.OrderBy(c => c.GoodBad); 
     foreach(var criteria in byGood) { 
      Console.WriteLine(criteria); 
     } 
     Console.WriteLine(); 
     Console.WriteLine("- By DayOfTheWeek:"); 
     IOrderedEnumerable<Criteria> byDayOfTheWeek = list.OrderBy(c => c.DayOfTheWeek); 
     foreach(var criteria in byDayOfTheWeek) { 
      Console.WriteLine(criteria); 
     } 
     Console.WriteLine(); 
     Console.WriteLine("- By Daytime:"); 
     IOrderedEnumerable<Criteria> byDaytime = list.OrderBy(c => c.Daytime); 
     foreach(var criteria in byDaytime) { 
      Console.WriteLine(criteria); 
     } 

     Console.ReadKey(); 
    } 
} 

sealed class Criteria : IComparable<Criteria> { 
    public readonly Color Color; 
    public readonly Country Country; 
    public readonly Town Town; 
    public readonly GoodBad GoodBad; 
    public readonly DayOfTheWeek DayOfTheWeek; 
    public readonly Daytime Daytime; 

    public Criteria(Color color, Country country, Town town, GoodBad goodBad, DayOfTheWeek dayOfTheWeek, Daytime daytime) { 
     this.Color = color; 
     this.Country = country; 
     this.Town = town; 
     this.GoodBad = goodBad; 
     this.DayOfTheWeek = dayOfTheWeek; 
     this.Daytime = daytime; 
    } 

    public override int GetHashCode() { 
     int result = (int)Color | (int)Country << 2 | (int)Town << 5 | (int)GoodBad << 8 | (int)DayOfTheWeek << 9 | (int)Daytime << 12; 
     return result; 
    } 

    public override string ToString() { 
     return string.Join(" ", Color, Country, Town, GoodBad, DayOfTheWeek, Daytime); 
    } 

    public int CompareTo(Criteria that) { 
     int result = this.Color.CompareTo(that.Color); 
     if(result != 0) { 
      return result; 
     } 
     result = this.Country.CompareTo(that.Country); 
     if(result != 0) { 
      return result; 
     } 
     result = this.Town.CompareTo(that.Town); 
     if(result != 0) { 
      return result; 
     } 
     result = this.GoodBad.CompareTo(that.GoodBad); 
     if(result != 0) { 
      return result; 
     } 
     result = this.DayOfTheWeek.CompareTo(that.DayOfTheWeek); 
     if(result != 0) { 
      return result; 
     } 
     result = this.Daytime.CompareTo(that.Daytime); 
     return result; 
    } 
} 

//2 bits 
enum Color { 
    green, 
    red, 
    blue, 
} 

//3 bits 
enum Country { 
    england, 
    thenetherlands, 
    america, 
} 

//3 bits 
enum Town { 
    london, 
    amsterdam, 
    newyork, 
} 

//1 bit 
enum GoodBad { 
    good, 
    bad, 
} 

//3 bits 
enum DayOfTheWeek { 
    monday, 
    tuesday, 
    wednesday, 
    thursday, 
    friday, 
    saturday, 
    sunday, 
} 

//3 bits 
enum Daytime { 
    morning, 
    afternoon, 
    evening, 
    night, 
} 
0

Я бы достиг этого, используя специальный хешинговый алгоритм с простой связью и без зондирования, если его одно значение. Это будет поститься.

Вы можете начать с использования индексов числа переписей или длин результата строки или что-то еще.

просто верните List.Count() и youre хорошо.

, если Вам необходимы дополнительная информация о хешировании вы должны смотреть на это: https://www.youtube.com/watch?v=0M_kIqhwbFo

EDIT:

после прочтения вашего комментария, если вы просто хотите, чтобы генерировать все перестановки вы должны сделать перечисления или список с возможным значения для категории. Затем адаптировать код на С # от этого вопроса How to generate all permutations of a list in Python

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