Как мне запустить массив, где первый член массива является строкой, которую нужно разделить - PullRequest
0 голосов
/ 31 октября 2010

У меня есть массив {{".txt | .doc | .docx", "100000"}, {".xls | .xlsx | .xxx", "10000"}, ".npp", "100000" }

Я пытаюсь найти способ запустить цикл foreach для каждого элемента массива в цикле, а также проверять первый элемент как строку, а не массив.

Код будет искать все документы, длина которых превышает 10000 байт, при условии, что документами являются txt, doc, docx и т. Д., А затем будет искать все xls, а затем npp. Некоторые члены первой части массива имеют несколько типов, некоторые только один. Есть ли эффективный способ сделать это?

Я пытался: if (size == (size [2, i]) && ((ext! = sextension [1, 0] .ToUpper ())) && ((ext! = sextension [1, x] .ToUpper ())))

но очевидно, что это не работает. Извините, если это не ясно, но я не уверен, как объяснить это иначе.

1 Ответ

0 голосов
/ 31 октября 2010

вот код, который вы поместили в комментарии выше:

c# string[,] extension = new string[5,2]{ 
  {".doc|.docx|.doc1","1000"} , 
  {".xls", "1000"} ,
  {".pdf","1000"},
  {".zip", "10000"}, 
  {".7z|.pz", "100000"} };

foreach (string p in array) 
{ 
  if (p == extension[0, 1]()) || ..ext2 = size or ..ext3 && (size) 
  {
     Console.WriteLine("Ext {0} has a file size equal to {1}", size_entention, size);

Не имеет большого смысла, но я пойду на это (угадывая до конца):

Лучший способ сопоставления расширений с учетом структуры данных - использовать regEx.Match(), однако это может быть медленным.(Помните, что если ваша строка поиска .docx, вам нужно будет сделать ее @"\.docx" перед вызовом regEx.match() - . зарезервировано в regEx.

Я не предлагаю это, это медленноЧто вам действительно нужно, так это словарь. Вот пример использования словаря:

Dictionary<string, int> d = new Dictionary<string, int>();
d.Add(".doc", 1000);
d.Add(".docx", 1000);
d.Add(".doc1", 1000);
d.Add(".xls", 1000);
d.Add(".pdf", 1000);
d.Add(".zip", 10000);
d.Add(".7z", 100000);
d.Add(".pz", 100000);

foreach (string p in array) 
{ 
  if (d.ContainsKey(p)
    Console.WriteLine("Ext {0} has a file size equal to {1}",p, d[p]);
}

Это будет намного быстрее при поиске того, что вы делали. Настройка словаря идет медленно, поэтому я бы предложилкеширование.

...