【问题标题】:Loop through comma delimited string, split into multiple arrays?循环通过逗号分隔的字符串,分成多个数组?
【发布时间】:2011-05-04 15:25:44
【问题描述】:

我有一个格式如下的字符串:

div, v6571, 0, div, v8173, 300, p, v1832, 400

我想把这个字符串拆分成多个数组,对于上面的例子我需要3个数组,格式如下:

item[0] -> div
item[1] -> v6571
item[2] -> 0

我知道我可以对字符串执行.Split(',') 并将其放入一个数组中,但这是一个大数组。对于上面的字符串示例,我需要 3 个具有上面提供的结构的数组。只是对字符串的迭代有点困惑!

谢谢!

【问题讨论】:

  • 如果组和组内使用相同的分隔符,应该如何确定数组组?
  • 我对您上面的示例不只是一个数组感到困惑。它确实看起来像一个。
  • @Tejs - 这是一个数组,但他希望将其拆分为多个数组。
  • 很抱歉给您带来了困惑。每个数组总是有 3 个值。这是否使它更清楚?所以在上面的示例字符串中,我需要 3 个数组,每个数组有 3 个值。

标签: c# asp.net arrays string


【解决方案1】:

我不确定您要查找的确切内容,但是要将上述内容转换为三个单独的数组,我会执行以下操作:

var primeArray = yourString.Split(,);
List<string[]> arrays = new List<string[]>();
for(int i = 0; i < primeArray.Length; i += 3)
{
  var first = primeArray[i];
  var second = primeArray[i+1];
  var third = primeArray[i+2];

  arrays.Add(new string[] {first, second, third});
}

然后你可以遍历你的字符串数组列表并做任何事情。

这确实假设您的所有字符串数组总是三个字符串长 - 如果不是,您需要在该 primeArray 上执行 foreach 并更手动地编组您的数组。

这是我使用的确切代码。请注意,它并没有真正改变我原来的非编译版本:

var stringToSplit = "div, v6571, 0, div, v8173, 300, p, v1832, 400";
List<string[]> arrays = new List<string[]>();
var primeArray = stringToSplit.Split(',');
for (int i = 0; i < primeArray.Length; i += 3)
{
   var first = primeArray[i];
   var second = primeArray[i + 1];
   var third = primeArray[i + 2];
   arrays.Add(new string[] { first, second, third });
}

当我在调试中检查它时,它确实具有所有三个预期的数组。

【讨论】:

  • 这似乎有效,但它没有将最后一个数组(3 组)添加到主数组。它只添加了前 2 个。
  • 你是否已经完成了调试?会发生什么?
  • 当我在我的机器上运行时,它起作用了——如果你愿意,我可以发布我编译的确切代码。
  • 顶部输入错误。 Split(,) 应该是 Split(',')
【解决方案2】:

.Split(",") 是您最好的选择。然后,您可以修改该字符串数组以反映您需要的任何结构。

您可以使用正则表达式或其他方法,但对于这种用例,没有任何东西可以达到 String.Split 的性能。

【讨论】:

    【解决方案3】:

    以下假设您的数组长度是三的倍数:

    var values = str.Split(',')
    
    string[,] result = new string[values .Length / 3, 3];
    for(int i = 0; i < params.Length; i += 3)
    {
        int rowIndex = i / 3;
        result[rowIndex, 0] = values [i];
        result[rowIndex, 1] = values [i + 1];
        result[rowIndex, 2] = values [i + 2];
    }
    

    在我的脑海中编译,但它应该可以工作。

    【讨论】:

      【解决方案4】:

      为了让我理解你的正确,你需要将它们分类:

      1) 仅字符数组 2) 字符和数字 3) 仅限数字

      如果是这样,您可以执行以下操作:

      1) 首先尝试用 Int32.Parse 解析字符串 如果成功存储在 numbers 数组中 2)捕捉异常并对数字做一个正则表达式 排序到剩余的 2 个数组中

      希望它有所帮助(:干杯!

      【讨论】:

        猜你喜欢
        • 2020-12-04
        • 1970-01-01
        • 2011-09-16
        • 1970-01-01
        • 2011-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多