【问题标题】:How to get a sub-string array from array string c#如何从数组字符串c#中获取子字符串数组
【发布时间】:2015-04-11 00:57:32
【问题描述】:

我是 C# 新手。
我有一个被拆分为字符串数组的字符串,并且其中一个元素需要再次拆分为字符串数组,因为它的解析方式不同。然后我试图将字符串数组转换为浮点数组,并将它们组合成一个最终的浮点数组,每个人都在原来的位置。

string ido = "433, 045, 3-3-15, 444, 0.6,3.9,4,5,5,4,3,3"; 

string[] sn= ido.Split(',', 13, StringSplitOptions.RemoveEmptyEntries);
string subnum = sn[2];
string[] st   = subnum.Split('-',3,StringSplitOptions.RemoveEmptyEntries);
float [] stNum = array.ConvertAll<string, float>(st, float.Parse)

float[] fArray = new float[ float.Parse(sn[0]), float.Parse(sn[1]),...
stNum, float.Parse(sn[3:end])];

我知道最后一行是错误的。我不想将每个元素分别输入到 float.Parse() 中。我正在尝试有没有更好的方法来做到这一点?我可以使用 ConvertAll,但如何才能将字符串数组中的元素从元素 3 获取到数组的末尾?

【问题讨论】:

  • 最终所需的输出是否为以下浮点数组:{433, 45, 3, 3, 15, 444, 0.6, 3.9, 4, 5, 5, 4, 3, 3?如果是这样,您应该可以执行以下操作:ido.Split(new [] { ',', '-' }).Select(float.Parse).ToArray().
  • 如果使用 for 遍历数组会怎样?
  • 你可以使用扩展方法Skip跳过前2个元素,它会返回一个从元素3开始的新数组(ToArray())。var a = new[] { 1,2,3,4 }; a = a.Skip(2).ToArray();
  • 谢谢大家帮忙!我认为 a.skip 方法是我正在寻找的,但我将使用其他方法来清理我的代码。非常感谢!

标签: c# arrays string


【解决方案1】:

由于您想要一个浮点数组的结果,您可以简单地将原始字符串拆分为',''-' 字符,这样您就可以得到一个只有“数字字符串”的数组。然后您可以使用float.TryParse() 将每个“数字字符串”转换为float 并将它们添加到您的数组中。

private static void Main()
{
    string ido = "433, 045, 3-3-15, 444, 0.6,3.9,4,5,5,4,3,3";

    // Split on both comma and dash
    var items = ido.Split(',', '-');

    // This list will hold all the items converted to floats
    var result = new List<float>();

    foreach (var item in items)
    {
        float temp;

        // Use TryParse to ensure we can successfully convert each item
        if (float.TryParse(item, out temp))
        {
            result.Add(temp);
        }
    }

    // Display final results
    Console.WriteLine(string.Join(", ", result));
}

输出:

433、45、3、3、15、444、0.6、3.9、4、5、5、4、3、3

请注意,在上面的示例中,我使用了 List&lt;float&gt;,因为如果 TryParse 对原始数组中的任何项目失败,我们不会将该项目添加到最终结果中,因此我们不确定如何许多项目来初始化一个数组。如果您真的需要一个数组,您可以随时通过调用ToArray() 方法将列表转换为数组,如下所示:

float[] arrayResult = result.ToArray();

更新

如果您熟悉 LINQ,还可以将整个内容缩短为几行:

string ido = "433, 045, 3-3-15, 444, 0.6,3.9,4,5,5,4,3,3";

float temp = 0; // Temporarily holds each converted item

float[] arrayResult = ido.Split(',', '-')
    .Where(item => float.TryParse(item, out temp))
    .Select(item => temp)
    .ToArray();

【讨论】:

  • 非常感谢您的帮助。
【解决方案2】:

这有点冗长,但我认为它可以满足您的需求。

string ido = "433, 045, 3-3-15, 444, 0.6,3.9,4,5,5,4,3,3"; 

string[] sn= ido.Split(new char[]{','}, 13, StringSplitOptions.RemoveEmptyEntries);

ArrayList list = new ArrayList();
foreach (string str in sn)
{
    string trimmedStr = str.Trim();
    float f;
    if (float.TryParse(trimmedStr, out f))
    {
        list.Add(f);
    }
    else if (trimmedStr.Contains("-"))
    {
        ArrayList list2 = new ArrayList();
        foreach (string str2 in trimmedStr.Split(new char[]{'-'}, StringSplitOptions.RemoveEmptyEntries))
        {
            string trimmedStr2 = str2.Trim();
            if (float.TryParse(trimmedStr2, out f))
            {
                list2.Add(f);
            }
        }
        list.Add(list2.ToArray());
    }
}

object[] array = list.ToArray();

导致:

【讨论】:

    猜你喜欢
    • 2011-05-31
    • 2013-07-07
    • 2020-12-03
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 2015-03-26
    • 1970-01-01
    • 2019-06-16
    相关资源
    最近更新 更多