1

基本的に次の文字列のマトリックスであるデータ構造を構築したいと思います。

  1. 拡張可能な行数
  2. 固定された列数

整数行番号と整数列番号を引数として取るメソッド呼び出しを介して、特定の行または列にあるものを取得できるようにしたいと考えています。さらに、行と列番号を使用して列の値を設定できるようにしたいと考えています。

私はこれを自分で行うことができますが、他の人が何をするかを見ることにオープンです...

編集申し訳ありませんが、列リストは修正されます。私の間違いです:-(

4

6 に答える 6

5

DataTableと DataSet (基本的にはデータ テーブルのコレクション) は、探しているものに対してうまく機能します。

次に、次の構文を使用してデータにアクセスできます (列を設定してデータの行を追加したら)。

datatable.rows(index)("ColumnName")

また

datatable.rows(rowindex)(columnindex)
于 2009-06-08T19:09:14.823 に答える
3

データテーブルが最も簡単な選択肢のように思えます。

于 2009-06-08T19:07:04.967 に答える
3

に基づいて何かをするのはDictionary<System.Drawing.Point, string>どうですか?あなたが書くことができるように;

stringGrid.Add(new Point(3,4), "Hello, World!");

そのような辞書を含むクラスを作成すると、探しているものがほとんど無料で手に入ります。のようなもの(未テスト)

class StringGrid
{
    Dictionary<System.Drawing.Point, string> grid;

    public StringGrid
    {
        this.grid = new Dictionary<System.Drawing.Point, string>();
    }

    public string Get(int x, int y)
    {
        string result = null;
        grid.TryGetValue(new Point(x,y), out result);
        return result;
    }

    public void Set(int x, int y, string content)
    {
        var pos = new Point(x,y);
        if (grid.ContainsKey(pos))
        {
            if (content == null)
            {
                // no content, so just clear the cell.
                grid.remove(pos);
            }
            else
            {
                // add new content
                grid[pos].Value = content;
            }  
        } 
        else if (content != null)
        {
            // new non-null content
            grid.add(pos, content);
        }
    }
}

編集:また、本当にフラッシュしたい場合。

  • 辞書をSortedList<,>
  • System.Drawing.Point実装する独自の構造体に置き換えますIComparable

このようにして、リストは内部的に行ごと、次に列foreachごとに並べ替えられ、最初の行のすべての値、次に 2 番目の値、というように反復するのに十分な単純なループが作成されます。`IEnumerable` または行のコレクションに変換できます。

于 2009-06-08T19:11:17.033 に答える
3

3 つ以上のディメンションが必要な場合、またはより一般的なソリューションがList<List<T>>必要な場合は、必要なだけ深くネストした で動作させることができます。また、より具体的な機能が必要な場合や、より単純なメソッド呼び出しが必要な場合は、カスタム タイプでラップすることができます。

于 2009-06-08T19:12:30.573 に答える
2

DataTable私が自分自身をロールバックしたい/する必要がある場合(たとえば、何/を扱いたくない場合)、行のリストとして(または)DataSetの周りに何かを書き、リストを長方形に保つロジックを含む列を記述します。List<List<T>>List<List<object>>

  • AddRow()新しい外部リスト エントリを追加します。
  • AddColumn()内部リストのすべてのリストに新しいアイテムを追加します。
  • this[int row, int col]アクセスしますthis._Data[row][col]

そんな感じ。

名前付き列が必要な場合は に切り替えDictionary<K, List<V>>ます (リストにはその列の行データが含まれます)。

于 2009-06-08T19:12:48.497 に答える