【问题标题】:adding values from a text file to 2 dimensional int array将文本文件中的值添加到二维 int 数组
【发布时间】:2018-12-03 15:05:48
【问题描述】:

我正在尝试将值添加到int[,] 的二维数组中

文本文件ConnectedCaves包含以下数据

0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,0,0 ,0,1,1,0,0,1,1,1,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0

我需要以下格式;

int[,] graph = new int[,] 
{
    { 0,0,0,1,0,0,0 },
    { 0,0,0,1,1,0,0 },
    { 0,0,0,0,1,1,1 },
    { 1,0,0,0,1,1,0 },
    { 0,1,1,1,0,0,0 },
    { 0,0,1,1,0,0,0 },
    { 0,0,1,0,0,0,0 }
};

我无法找到有关如何完成此操作的太多信息。因此没有任何可用于共享的代码。

是否可以将它在文本文件中出现时添加到二维数组中?如果不是直接将这些数据以文本文件中显示的格式放入数组的最佳方法是什么?

【问题讨论】:

  • 你的文本文件是这样的吗?我的意思是{ } 和其他东西
  • 如果你不展示你迄今为止尝试过的东西,就不可能帮助你,因为我们根本不知道你的问题到底是什么。
  • @Cid 是的,在带有括号和逗号的文本文件中
  • @RandRandom 他需要相反

标签: c# arrays multidimensional-array int


【解决方案1】:

几乎是Json:


(来源:json.org

由此我们知道你的字符串的最终结构必须是这样的:

[
  [ 0,0,0,1,0,0,0 ],
  [ 0,0,0,1,1,0,0 ]
]

所以使用简单的replace,并使用Json.net 反序列化json:

var inputs =
@"{ 0,0,0,1,0,0,0 },
{ 0,0,0,1,1,0,0 }";

var jsoned = String.Format("[{0}]", inputs.Replace('{', '[').Replace('}', ']'));
var result = JsonConvert.DeserializeObject<int[,]>(jsoned);

【讨论】:

    【解决方案2】:

    您需要以下代码:

    1. 将该输入拆分为行。
    2. 将每一行拆分为单元格、字段或单独的值
    3. 将这些值放入数组中

    我认为步骤 1+2 可以使用 REGEX 完成。如果那些大括号不存在,任何 CSV 解析代码也可能能够处理它。

    第 3 步可能需要解析。您通常不想在代码中使用字符串或字符。这看起来像整数,因此将它们解析为整数并使用它们。

    至于后端数组:如果您不知道会有多少行 - 甚至每行有多少个字段 - 您必须使用 List 或其他高级集合来代替。对于那些你只能使用锯齿状样式的人,afaik。

    【讨论】:

    • 作为问题,你的答案 - 当然 - 非常模糊和不具体。
    • 好的,例如,如果我删除了所有的括号和逗号,则数据将包含在整数列表中。然后可以将其拆分为问题中显示的行并根据需要应用大括号和逗号吗?
    • @bdg 当前输入已经可以拆分了。这就是正则表达式存在的目的。如果它遵循 CSV 文件的所有限制,它会稍微容易一些,所以你可以让任何随机的 CSV 解析器适应它。正则表达式涉及更多。
    【解决方案3】:

    使用SplitTrimSelect,您可以轻松获得List&lt;int[]&gt;

    var inputs =
    @"{ 0,0,0,1,0,0,0 },
    { 0,0,0,1,1,0,0 },";
    
    var lines = inputs.Split(new[] { Environment.NewLine }, StringSplitOptions.None);
    
    var dim =
        lines.Select(
            line =>
            line.Trim(new[] {'{', '}', ','})
                .Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
                .Select(element => int.Parse(element))
                .ToArray()
        ).ToList();
    

    然后你可以使用Jon's answerHow to convert list of arrays into a multidimensional array

    static T[,] CreateRectangularArray<T>(IList<T[]> arrays)
    {
        // TODO: Validation and special-casing for arrays.Count == 0
        int minorLength = arrays[0].Length;
        T[,] ret = new T[arrays.Count, minorLength];
        for (int i = 0; i < arrays.Count; i++)
        {
            var array = arrays[i];
            if (array.Length != minorLength)
            {
                throw new ArgumentException
                    ("All arrays must be the same length");
            }
            for (int j = 0; j < minorLength; j++)
            {
                ret[i, j] = array[j];
            }
        }
        return ret;
    }
    

    【讨论】:

      猜你喜欢
      • 2013-01-26
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多