C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: 【c#】配列の並び替えで数字順にならない


(過去ログ 135 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■79871 / inTopicNo.1)  【c#】配列の並び替えで数字順にならない
  
□投稿者/ はこ (1回)-(2016/05/25(Wed) 21:29:35)

分類:[C#] 

こんにちは
配列に代入している数値が小さい数から大きい数になりません。

配列には、"dc_7", "dc_10", "dc_19", "dc_20", "dc_9", "dc_33", "dc_1" が入っています。

Array.sortで並び変えたら "dc_1", "dc_10","dc_19","dc_20", "dc_33" "dc_7", "dc_9", となりました。

私が望んでいたのは "dc_1", "dc_7", "dc_9", "dc_10", "dc_19", "dc_20", "dc_33" のようになることです。

どうしたらいいのでしょうか。

ソースコードを貼ります。
よろしくお願いします。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            string[] m_test = new string[7] { "dc_7", "dc_10", "dc_19", "dc_20", "dc_9", "dc_33", "dc_1" };
            Array.Sort(m_test);
        }
    }
}

引用返信 編集キー/
■79872 / inTopicNo.2)  Re[1]: 【c#】配列の並び替えで数字順にならない
□投稿者/ 774RR (403回)-(2016/05/25(Wed) 22:00:59)
ここで配列に入っているのは「数値」ぢゃないよね。正しくは「数値文字を含む文字列」。
文字列を単純に大小比較すると「文字コードの大小」で判定されるのでそういう結果になる。

で、提示内容だけでは要件定義が不足っす。

dc_1 と ex_1 はどっちが小? (数値部分以外はどう扱うのか)
dc_3 と dc_1E2 はどっちが小? (1E2 を 100.0 と解釈するのか否か)
dc_1_200 と dc_2_100 ではどっちが小? (数値が複数個出てきたらどう解釈するのか)

プログラムってのはこの手の細かいところまで「仕様」を煮詰めてからでないと作れないんだ。

参考過去ログ
http://bbs.wankuma.com/index.cgi?mode=al2&namber=54584&KLOG=91
これがあなたの求めているものであるかどうかは知らない。


引用返信 編集キー/
■79874 / inTopicNo.3)  Re[2]: 【c#】配列の並び替えで数字順にならない
□投稿者/ w10p (1回)-(2016/05/26(Thu) 07:10:51)
数字部分の桁をそろえたら?

dc_01, dc_09, dc_15 ・・・
引用返信 編集キー/
■79875 / inTopicNo.4)  Re[3]: 【c#】配列の並び替えで数字順にならない
□投稿者/ kaina (10回)-(2016/05/26(Thu) 09:42:07)
そもそもソートって何か理解出来ていますか?
以下の二つのソート結果で数値部分の順番が何故異なるか解りますか?


string[] m_test = new string[7] { "dc_7", "dc_10", "dc_19", "dc_20", "dc_9", "dc_33", "dc_1" };
Array.Sort(m_test);

int [] i_test = new int[7] { 7, 10, 19, 20, 9, 33, 1 };
Array.Sort( i_test );
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -