排序后遍历数组时,如何在C#中拆分输出?

排序后遍历数组时,如何在C#中拆分输出?,c#,arrays,sorting,for-loop,insertion-sort,C#,Arrays,Sorting,For Loop,Insertion Sort,我有以下情况: 首先,我输入要插入数组的数据量。 在这之后,我在每一行上插入两个值(使用Split()),它们之间有一个空格)到一个数组中,这些值一起构成一个分数。 下面是代码: int amount = Int32.Parse(Console.ReadLine()); double[] data = new double[amount]; for (int x = 0; x < amount; x++) { string[] spaces = Console.ReadLine()

我有以下情况:

首先,我输入要插入数组的数据量。 在这之后,我在每一行上插入两个值(使用
Split()
),它们之间有一个空格)到一个数组中,这些值一起构成一个分数。 下面是代码:

int amount = Int32.Parse(Console.ReadLine());
double[] data = new double[amount];
for (int x = 0; x < amount; x++)
{
    string[] spaces = Console.ReadLine().Split();
    data[x] = Double.Parse(spaces[0]) / Double.Parse(spaces[1]);       
}
然后它将创建分数1/2和2/2,等于0.5和1

插入这些值后,for循环将对其进行排序,使其以非降序排列。这是代码的一部分:

for (int i = 1; i < data.Length; i++)
{
    value = data[i];
    j = i - 1;
    while (j >= 0 && data[j] > value)
    {
        data[j + 1] = data[j];
        j--;
    }
    data[j + 1] = value;
}
我将获得以下输出:

1 3
1 2
2 2
而不是分数so
0.333
0.5
1


我知道我必须删除
/
运算符,但我不知道还能做什么。

当您接收信息时,您正在将分数转换为小数。你需要做的是保留分数,这样你以后就可以把它们写出来。我将从一个结构开始:

class Data
{
  double Value { get { return Numerator / Denominator } }
  double Numerator { get; set; }
  double Denominator { get; set; }
}
然后你可以按
.Value
对它们进行排序,当你写出它时,你可以按
分子+“”+分母来写出它

在排序中,使用以下值:

value = data[i].Value;
--
while(j >= o && data[j].Value > value)
移动对象保持不变

打印时使用分子和分母

Console.WriteLine(data[y].Numerator + " " + data[y].Denominator);

当你输入信息时,你正在把分数转换成小数。你需要做的是保留分数,这样你以后就可以把它们写出来。我将从一个结构开始:

class Data
{
  double Value { get { return Numerator / Denominator } }
  double Numerator { get; set; }
  double Denominator { get; set; }
}
然后你可以按
.Value
对它们进行排序,当你写出它时,你可以按
分子+“”+分母来写出它

在排序中,使用以下值:

value = data[i].Value;
--
while(j >= o && data[j].Value > value)
移动对象保持不变

打印时使用分子和分母

Console.WriteLine(data[y].Numerator + " " + data[y].Denominator);

当你输入信息时,你正在把分数转换成小数。你需要做的是保留分数,这样你以后就可以把它们写出来。我将从一个结构开始:

class Data
{
  double Value { get { return Numerator / Denominator } }
  double Numerator { get; set; }
  double Denominator { get; set; }
}
然后你可以按
.Value
对它们进行排序,当你写出它时,你可以按
分子+“”+分母来写出它

在排序中,使用以下值:

value = data[i].Value;
--
while(j >= o && data[j].Value > value)
移动对象保持不变

打印时使用分子和分母

Console.WriteLine(data[y].Numerator + " " + data[y].Denominator);

当你输入信息时,你正在把分数转换成小数。你需要做的是保留分数,这样你以后就可以把它们写出来。我将从一个结构开始:

class Data
{
  double Value { get { return Numerator / Denominator } }
  double Numerator { get; set; }
  double Denominator { get; set; }
}
然后你可以按
.Value
对它们进行排序,当你写出它时,你可以按
分子+“”+分母来写出它

在排序中,使用以下值:

value = data[i].Value;
--
while(j >= o && data[j].Value > value)
移动对象保持不变

打印时使用分子和分母

Console.WriteLine(data[y].Numerator + " " + data[y].Denominator);

Kyle W的答案就是你想要的。我只想添加一个细节:

您可以将以下方法添加到
数据
类中:

public override string ToString()
{
    return String.Format("{0} {1}", Numerator, Denominator);
}
然后,当您打印出数据数组的元素时,您只需执行以下操作:

foreach(var item in data)
{
    Console.WriteLine(data);
}
这将自动对数据调用ToString()方法,并提供所需的输出。稍后,您可以将该方法更改为如下所示,而无需更改输出循环:

public override string ToString()
{
    return String.Format("{0} {1}. Decimal Value: {2}", Numerator, Denominator, Value);
}

现在,您的输出还显示了值,这表明这是一种非常直观和灵活的方式为您的类进行输出。

Kyle W的答案就是您想要的。我只想添加一个细节:

您可以将以下方法添加到
数据
类中:

public override string ToString()
{
    return String.Format("{0} {1}", Numerator, Denominator);
}
然后,当您打印出数据数组的元素时,您只需执行以下操作:

foreach(var item in data)
{
    Console.WriteLine(data);
}
这将自动对数据调用ToString()方法,并提供所需的输出。稍后,您可以将该方法更改为如下所示,而无需更改输出循环:

public override string ToString()
{
    return String.Format("{0} {1}. Decimal Value: {2}", Numerator, Denominator, Value);
}

现在,您的输出还显示了值,这表明这是一种非常直观和灵活的方式为您的类进行输出。

Kyle W的答案就是您想要的。我只想添加一个细节:

您可以将以下方法添加到
数据
类中:

public override string ToString()
{
    return String.Format("{0} {1}", Numerator, Denominator);
}
然后,当您打印出数据数组的元素时,您只需执行以下操作:

foreach(var item in data)
{
    Console.WriteLine(data);
}
这将自动对数据调用ToString()方法,并提供所需的输出。稍后,您可以将该方法更改为如下所示,而无需更改输出循环:

public override string ToString()
{
    return String.Format("{0} {1}. Decimal Value: {2}", Numerator, Denominator, Value);
}

现在,您的输出还显示了值,这表明这是一种非常直观和灵活的方式为您的类进行输出。

Kyle W的答案就是您想要的。我只想添加一个细节:

您可以将以下方法添加到
数据
类中:

public override string ToString()
{
    return String.Format("{0} {1}", Numerator, Denominator);
}
然后,当您打印出数据数组的元素时,您只需执行以下操作:

foreach(var item in data)
{
    Console.WriteLine(data);
}
这将自动对数据调用ToString()方法,并提供所需的输出。稍后,您可以将该方法更改为如下所示,而无需更改输出循环:

public override string ToString()
{
    return String.Format("{0} {1}. Decimal Value: {2}", Numerator, Denominator, Value);
}

现在,您的输出还显示了值,这表明这是一种非常直观和灵活的方法,可以为您的类执行输出。

为什么要执行自己的排序实现?我想试试这个方法,因为这是我学习数据结构基础知识的方法之一,但是排序效果很好,只是输出不是它应该的样子。我很困惑。您想要的输出是什么?(还有,上次我检查时,1/3<1/2,所以你的排序被破坏了。)Sry那是我的错,我在问题中编辑了它,循环正在工作。我想要的输出只是那些我放在控制台中但经过排序的数字,所以从你在问题的输出部分看到的方式来看,你为什么要做自己的排序实现?我想尝试一下,因为这是我学习数据结构基础知识的方法之一,但是排序工作非常完美,只是输出不是它的支持方式