【问题标题】:How do I run through an array where the first array member is a string that needs to be split如何遍历第一个数组成员是需要拆分的字符串的数组
【发布时间】:2010-10-31 13:21:43
【问题描述】:

我有一个数组 {{".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())))

但显然这不起作用。 抱歉,如果不清楚,但我不确定如何解释。

【问题讨论】:

  • 显示更多代码 - 它实际上是什么编程语言?看起来像PHP?尝试使用代码按钮(01101 按钮)。
  • JavaScript?语言不清楚。
  • c# string[,] extension = new string[5,2]{ {".doc|.docx|.doc1","1000"} , {".xls", "1000"} , {".pdf","1000"}, {".zip", "10000"}, {".7z|.pz", "100000"} }; foreach(数组中的字符串 p){ if (p == extension[0, 1]()) || ..ext2 = size or ..ext3 && (size) { Console.WriteLine("Ext {0} 的文件大小等于 {1}", size_enttention, size);
  • 基本上我需要将具有特定扩展名的文件与大小进行比较,问题是同一文件类型有多个扩展名,如果我尝试“拆分”数组(例如 split ' |' on doc, docx,. ...) 我得到一个数组,我似乎可以做一个: If filewithext = 1000 || filewithext2 = 10000 ||当所有扩展都在数组的同一第一部分时,filewithex3 = 1000。

标签: c# string foreach split for-loop


【解决方案1】:

这是您在上面评论中输入的代码:

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,则需要在调用 regEx.match() 之前将其设为 @"\.docx" -- . 在正则表达式中保留。

我不建议这样做,它很慢。你真正想要的是一本字典。下面是一个使用字典的例子:

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]);
}

这将比您正在执行的搜索快得多。设置字典很慢,所以我建议缓存它。

【讨论】:

  • 如果我没有说清楚,我深表歉意。我的代码不起作用,所以这就是为什么它没有意义。我正在尝试在文件系统中搜索所有带有扩展名的文件,但对于相同类型的文件(doc、docx 等),我只想比较一次。我遇到的问题是当我搜索大小为 array[0,1] 的 array[0,0] 文件类型时(在循环中)我希望 if 语句比较 array[0,0] (所有这些都在我之后拆分它们)。所以如果文件 .docx || .doc || .rdoc == 文件大小,然后是 console.writeline。
  • 然后使用正则表达式,就像我说的那样——无论你在做什么,这都是一个更糟糕的选择(目前还不清楚)。
  • 请注意:上面的示例代码将完全按照您的示例尝试执行 - 在您的代码中尝试它,看看它是否真的是您想要的。
  • 我最终使用了我找到的一个 multimap 类,一个字典,一个键,多个值。但是你给我指明了正确的方向。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-16
  • 1970-01-01
  • 2016-06-28
  • 1970-01-01
  • 2019-04-29
  • 2020-02-06
  • 2016-07-13
相关资源
最近更新 更多