【问题标题】:Assign string into multidimensional array将字符串分配到多维数组中
【发布时间】:2014-06-14 09:03:43
【问题描述】:

假设我有以下字符串

[["Fri, 28 Mar 2014 01:00:00 +0000",0.402053266764,"1 sold"],["Thu, 03 Apr 2014 01:00:00 +0000",6.5,"1 sold"]]; 

如何将这组字符串分配到数组中?

预期结果:

string[,] items = {
{ "Fri, 28 Mar 2014 01:00:00 +0000", "0.402053266764", "1 sold"},
{ "Thu, 03 Apr 2014 01:00:00 +0000", "6.5", "1 sold"}
                  }

【问题讨论】:

  • 您必须解析您的字符串并收集所需的数据。
  • ,分割然后替换[]
  • 这组字符串存放在哪里?
  • @Rahul 这行不通,因为他的行包含“,”也在单个部分中
  • Rahul,它会分裂,但不会按照用户想要的方式分裂。例如,在他的帖子中显示的行将不会分成两部分,而是分成 7 部分。

标签: c# asp.net arrays multidimensional-array


【解决方案1】:

蛮力攻击,可能有更好的解决方案

string input ="[[\"Fri, 28 Mar 2014 01:00:00 +0000\",0.402053266764,\"1 sold\"],[\"Thu, 03 Apr 2014 01:00:00 +0000\",6.5,\"1 sold\"]]"; 
string temp = input.Replace("[", "");
string[] records = temp.Split(new char[] {']'}, StringSplitOptions.RemoveEmptyEntries);

string[,] output = new string[records.Length, 3];
int recno = 0;
foreach(string record in records)
{
    Console.WriteLine(record);
    string[] fields = record.Split(new char[] {','}, StringSplitOptions.RemoveEmptyEntries);
    output[recno,0] = string.Join(",", fields[0], fields[1]);    
    output[recno,1] = fields[2];    
    output[recno,2] = fields[3];    
    recno++;
}

for(int x = 0; x <= output.GetUpperBound(0); x++)
{
    for(int y = 0; y <= output.GetUpperBound(1); y++)
        Console.Write("INDEX[" +x + "," + y +"]=" + output[x, y] + ";");
    Console.WriteLine();                            
}

【讨论】:

  • 如果我用,[ 分割然后只替换[] 的其余部分怎么办?你说什么!
  • 是的,但是你应该删除输入开头和结尾的双方括号,而不是一个很大的收获。例如,这一行可以替换前两个 var temp = input.Split(new string[] {",["}, StringSplitOptions.RemoveEmptyEntries).Select(x =&gt; x.Trim(new char[] {'[', ']'}));
  • 正确同意。我总是对 LINQ 感到困惑(目前正在尝试学习它)。您能否建议一种简单/有效的方法来掌握 LINQ/LAMDA 表达式。谢谢。
  • @Rahul 我和你一样,我没有掌握足够的 LINQ 来提供建议。但是,有一个名为LinqPAD 的强大工具可以让您在没有庞大而笨重的 Visual Studio 的情况下尝试和测试您的想法。这就是我能建议的全部。
  • 建议是suggestion;无论大小。谢谢史蒂夫。周末愉快:)
【解决方案2】:
string inputString; //Your original string
inputString=inputString.Replace('[',' '); //Removes left bracket
inputString=inputString.Substring(0,inputString.Count()-2); //Removes last two right brakets
var arrayOfStrings=inputString.Split(']'); //Split on right bracket
for(int i=1; i < arrayOfStrings.Count() -1; i++){
    arrayOfStrings[i]=arrayOfStrings[i].Substring(1); //Removes the "," at the start of the 2nd to the n-1th elements
}

【讨论】:

    猜你喜欢
    • 2021-12-07
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    相关资源
    最近更新 更多