Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将字符串数组拆分为锯齿状对象数组_C#_Arrays_Function_Jagged Arrays - Fatal编程技术网

C# 将字符串数组拆分为锯齿状对象数组

C# 将字符串数组拆分为锯齿状对象数组,c#,arrays,function,jagged-arrays,C#,Arrays,Function,Jagged Arrays,我想用名称值和一些数字(即字符串)创建一个字符串数组 我想将它们传递到一个函数中,该函数将获取数组,然后将它们拆分为一个对象交错数组(1个字符串数组和1个整数数组) 阵列是: string[] str= { "toto", "the", "moto", "my", "friend","12","13","14","99","88"}; 函数如下所示: public object[][] bloop (string[] bstr) { } 下一步是什么 您的场景看起来像糟糕的设计,可能会导致

我想用名称值和一些数字(即字符串)创建一个字符串数组 我想将它们传递到一个函数中,该函数将获取数组,然后将它们拆分为一个对象交错数组(1个字符串数组和1个整数数组)
阵列是:

string[] str= { "toto", "the", "moto", "my", "friend","12","13","14","99","88"};
函数如下所示:

public object[][] bloop (string[] bstr)
{

}

下一步是什么

您的场景看起来像糟糕的设计,可能会导致错误和性能问题。更好的方法是更改使用generic
List
之类的代码。但在您当前的问题中,您可以使用以下代码:

public object[][] bloop (string[] bstr)
{
    var numbers = new List<int>();
    var strings = new List<string>();
    var result = new object[2][];

    foreach(var str in bstr)
    {
        int number = 0;
        if(int.TryParse(str, out number))
        {
            numbers.Add(number);
        }
        else
        {
            strings.Add(str);
        }
    }

    result[0] = strings.ToArray();
    result[1] = numbers.ToArray();

    return result;
}
public object[]bloop(string[]bstr)
{
变量编号=新列表();
var strings=新列表();
var结果=新对象[2][];
foreach(bstr中的var str)
{
整数=0;
if(内部锥虫(str,外部编号))
{
数字。添加(数字);
}
其他的
{
strings.Add(str);
}
}
结果[0]=strings.ToArray();
结果[1]=numbers.ToArray();
返回结果;
}

您的场景看起来像糟糕的设计,可能会导致错误和性能问题。更好的方法是更改使用generic
List
之类的代码。但在您当前的问题中,您可以使用以下代码:

public object[][] bloop (string[] bstr)
{
    var numbers = new List<int>();
    var strings = new List<string>();
    var result = new object[2][];

    foreach(var str in bstr)
    {
        int number = 0;
        if(int.TryParse(str, out number))
        {
            numbers.Add(number);
        }
        else
        {
            strings.Add(str);
        }
    }

    result[0] = strings.ToArray();
    result[1] = numbers.ToArray();

    return result;
}
public object[]bloop(string[]bstr)
{
变量编号=新列表();
var strings=新列表();
var结果=新对象[2][];
foreach(bstr中的var str)
{
整数=0;
if(内部锥虫(str,外部编号))
{
数字。添加(数字);
}
其他的
{
strings.Add(str);
}
}
结果[0]=strings.ToArray();
结果[1]=numbers.ToArray();
返回结果;
}

我同意您的要求听起来很奇怪,应该用不同的方法来解决。但是,这将满足您的要求:

public T[][] Bloop<T>(T[] items)
{
    if (items == null) throw new ArgumentNullException("items");
    if (items.Length == 1) return new T[][] { items, new T[] { } };

    int firstLength = (int) Math.Ceiling((double)items.Length / 2);
    T[] firstPart = new T[firstLength];
    Array.Copy(items, 0, firstPart, 0, firstLength);
    int secondLength = (int)Math.Floor((double)items.Length / 2);
    T[] secondPart = new T[secondLength];
    Array.Copy(items, firstLength, secondPart, 0, secondLength);
    return new T[][] { firstPart, secondPart };
}
如果需要第二个数组作为
int[]
,可以使用以下命令:

int[] ints = Array.ConvertAll(result[1], int.Parse);

我同意你的要求听起来很奇怪,应该用不同的方法来解决。但是,这将满足您的要求:

public T[][] Bloop<T>(T[] items)
{
    if (items == null) throw new ArgumentNullException("items");
    if (items.Length == 1) return new T[][] { items, new T[] { } };

    int firstLength = (int) Math.Ceiling((double)items.Length / 2);
    T[] firstPart = new T[firstLength];
    Array.Copy(items, 0, firstPart, 0, firstLength);
    int secondLength = (int)Math.Floor((double)items.Length / 2);
    T[] secondPart = new T[secondLength];
    Array.Copy(items, firstLength, secondPart, 0, secondLength);
    return new T[][] { firstPart, secondPart };
}
如果需要第二个数组作为
int[]
,可以使用以下命令:

int[] ints = Array.ConvertAll(result[1], int.Parse);
Linq解决方案

您有两个组:第一个组包含可以解析为
int
的项,第二个组包含所有其他项,因此
GroupBy
看起来非常自然:

public Object[][] bloop(string[] bstr) {
  if (null == bstr)
    throw new ArgumentNullException("bstr");

  int v;

  return bstr
    .GroupBy(x => int.TryParse(x, out v))
    .OrderBy(chunk => chunk.Key) // let strings be the first
    .Select(chunk => chunk.ToArray())
    .ToArray();
}
测试:

Linq解决方案

您有两个组:第一个组包含可以解析为
int
的项,第二个组包含所有其他项,因此
GroupBy
看起来非常自然:

public Object[][] bloop(string[] bstr) {
  if (null == bstr)
    throw new ArgumentNullException("bstr");

  int v;

  return bstr
    .GroupBy(x => int.TryParse(x, out v))
    .OrderBy(chunk => chunk.Key) // let strings be the first
    .Select(chunk => chunk.ToArray())
    .ToArray();
}
测试:


下一步:向我们展示您尝试过的内容。下一步:向我们展示您尝试过的内容。似乎您使用
新对象[bstr.Length]
分配了太多的项目;这就是为什么
bloop
的尾部项将是
null
sYes,你是对的,我们无法预测将有多少字符串/整数,我们可以通过使用通用集合/列表和可自动递增的数组来避免这一点。似乎你用
新对象[bstr.Length]
分配了太多项;这就是为什么
bloop
的尾部项将是
null
sYes,你是对的,我们无法预测将有多少字符串/整数,我们可以通过使用通用集合/列表和可自动递增的数组来避免这一点。