c# 行と列 どっちが先?

このQ&Aのポイント
  • c# 初心者のため、インデクサやメソッドで行と列を表す引数の順序について迷っています。
  • 具体的には int this[int row, int column] { get; set; } なのか、int this[int column, int row] { get; set: } なのか分かりません。
  • 「TableLayoutControlCollection」の例では、public void Add(Control control, int column, int row) という順序になっているため、どちらが正しいのか分からなくなってしまいました。
回答を見る
  • ベストアンサー

c# 行と列 どっちが先?

 こんにちは。c#初心者です。  インデクサやメソッドなどで行を表す引数と、列を表す引数のどちらを先に持って来ればよいか分からず質問させてもらいました。  具体的には  int this[int row, int column] { get; set; } なのか、  int this[int column, int row] { get; set: }  なのかで迷っています。最初は前者で作るつもりだったのですが、「TableLayoutControlCollection」によると、  public void Add(Control control, int column, int row)  のようになっており、後者の順だったので分からなくなってしまいました。  どなたかご存知の方がいらっしゃいましたら教えていただけませんか?

質問者が選んだベストアンサー

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

#1の方の言うとおりですが、どちらが大きい範囲を示すものかを考えると 1行(row)の中に、各列(column)があると考えるほうが自然です。 従って、大→小の順にパラメータを並べるほうが自然です。 従って、特別な理由がない限りは、row,columnとすることをお勧めします。

koumei000
質問者

お礼

なるほどです。回答ありがとうございます。

その他の回答 (1)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

コーディング規約で統一してあれば、どちらでも自由だと思うけど。 私が2次元表を使うときは、テーブルのイメージで利用します。 2重ループの外側にCol、内側にRowとします。

koumei000
質問者

お礼

回答ありがとうございます。参考にさせてもらいます。

関連するQ&A

  • Java クラスを使ったソート

    Javaで隣接交換法を用いて配列dataを昇順に並び替え、出力するプログラムを作成する。 ただし、ループ処理には、int型の変数は使わず、以下のCounterクラスを使用する。 という課題が出て、とり組んでみたのですが所々よく分からないので、お力添えしていただければと思います。 課題には下記のような条件が書いてありました。 配列data={54,76,32,89,45,11,8,54,29,67}; [クラス] Counter [インスタンス変数] int型の値を保持するcount [コンストラクタ] 引数で渡された値を初期値としてインスタンス変数に設定する。 引数を省略された場合、ゼロを設定する。 [メソッド] increment 値に1加算する decrement 値に1減算する compareTo 以下の処理を行う Counterの保持している値が引数に指定された値と 等しい場合、値0を返す。 Counterの保持している値が引数に指定された値より 小さい場合、0より小さい値を返す。 Counterの保持している値が引数に指定された値より 大きい場合、0より大きい値を返す。 get Counterの保持している値を添え字として、 引数で渡された配列の要素を取得します。 set Counterの保持している値を添え字として、 第1引数で渡された配列に第2引数で渡された値を設定します。 以下組んだものです。 ---- class Counter { int count = 0; Counter(int count) { this.count = count; } Counter() { this.count = 0; } public int get(int[] data) { return this.count; } public void set(int[] data, int count) { this.count = count; } public void increment() { this.count = count + 1; } public void decrement() { this.count = count - 1; } public int compareTo() { return count; } } public class Lesson09 { public static void main(String args[]) { Counter counter = new Counter(0); int[] data = {54, 76, 32, 89, 45, 11, 8, 54, 67}; counter.get(data); counter.set(data, 0); } } ---- とりあえず、compareToとsetとgetの部分をどう記述していいのかがよく分かりません。 よろしくお願いします。

    • ベストアンサー
    • Java
  • C#クラスについて教えてください

    下記通りクラスを作成した場合、プロパティaを配列にできますか? class Class1 { public string a { set; get; } public int b { set; get; } public int c { set; get; } } イメージとしては下記通りにしたいのですが、なかなかうまく行きません。 class Class1 { public Class1(int x) { } public string a[x] { set; get; } public int b { set; get; } public int c { set; get; } } private void Form1_Load(object sender, EventArgs e) { Class1 f = new Class1(2); f.a[0] = "asdf"; f.a[1] = "asdfa"; f.a[2] = "asdfasd"; f.b = 1; f.c = 2; } 初心者なんで、やさしく教えてください。お願いします。

  • SwingでJtableのヘッダ行が表示されません

    SwingでJtableのヘッダ行が表示されません 解決方法とどうして表示されなかったのか理由もできればお願いします。 import java.util.Vector; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTable; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableModel; public class Table_Calendar extends JFrame{ Vector<String>[] data = new Vector[3]; public static void main(String args[]){ new Table_Calendar(); } public Table_Calendar(){ super(); // ウィンドウサイズ this.setSize(800, 600); // レイアウト this.setLayout(null); // ウィンドウクローズ時の処理 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // セルのデータ作成 for (int i = 0; i < 3; i++) { data[i] = new Vector<String>(); } // data[0]に名前、data[1]に住所、data[2]に電話番号 data[0].addElement("鈴木一郎"); data[1].addElement("東京都"); data[2].addElement("xxxxxxxxxx"); // テーブル作成 TableModel tableModel = new AbstractTableModel() { // 行数 public int getRowCount() { return 1; } // 列数 public int getColumnCount() { return 3; } // row行column列の値をセット public Object getValueAt(int row, int column) { return data[column].elementAt(row); } // タイトル部の値をセット public String getColumnName(int column) { switch (column) { case 0: return "名前"; case 1: return "住所"; case 2: return "電話番号"; } return ""; } }; JTable table = new JTable(tableModel); table.setLocation(10, 20); table.setSize(600,500); JPanel panel2 = new JPanel(); panel2.setLayout(null); panel2.add(table); /*setBounds(int x,int y,int width,int height)*/ panel2.setBounds(10, 10, 700,700); this.add(panel2); this.setVisible(true); } }

    • ベストアンサー
    • Java
  • 永続化前後のクラスの表現について C#

    ものすごくくだらない質問ですみません。 リレーショナルデータベースを使わざるを得なく、O/Rマッピングツールは使えない状況です。 class Employee があります。 StaffCodeがありますが、将来このコードが重複はありませんが変わる可能性があるので永続化を目的としてこれを主キーとして使えません。 そこで主キーにサロゲートキーを使おうと考えました。 アプリ側で対応するよりもデータベース側でオートナンバーを使います。 一応下記コードでこれから採番する社員と、永続化&採番したあとの社員を表現する事はできます。 しかし同じクラスを使うものなのでしょうか? クラスを分けるべきでしょうか? そもそも考え方がおかしいですか? Class Employee { Public Int Id { get; private set; } Public String Name { get; private set; } Public Int StaffCode { get; private set; } Public Employee(String name, Int staffCode) { this.Name = name; this.StaffCode = staffCode; } Public Employee(Int id, String name, Int staffCode) { this.Id = id; this.Name = name; this.StaffCode = staffCode; } Public Void SetId(Int id) { this.Id = id; } }

  • クラスのファイル分割について

    こんにちは。JavaをやっていましたがC++が必要になってC++を勉強している者です。 クラスを別のファイルに分割する際の書き方についてなのですが、 --Graph.h-- struct edge{ int to, cost; edge(int to,int cost){ this->to = to; this->cost = cost; } } class dijkstra{ public: vector<edge> *G;  ~~~  void set_graph(int N); void add_edge(int a, int b, int cost); ~~~ } ---- --Dijkstra.cpp-- void dijkstra::set_graph(int N){ G = new vector<edge>[N]; } void dijkstra::add_edge(int a,int b,int cost){ G[a].push_back(edge(b,cost)); } ---- としたとき、当方の開発環境のEclipseは「push_backの引数と合わない」といった旨のエラーを出しています。何が悪いのでしょうか。ご教授お願いします。

  • 【C# DataGridViewについて】

    C#であるWindowsFormアプリケーションを作っているのですが imagelistに格納されている画像群をDataGridViewで表示しようと for (int y = 0; y < gy; ++y) { DataGridViewRow row = new DataGridViewRow(); for (int x = 0; x < gx; ++x) { DataGridViewImageCell imageCell = new DataGridViewImageCell(); imageCell.Value = imageList.Images[y * gx + x]; row.Cells.Add(imageCell); } dataGridView1.Rows.Add(row);//ここが問題 } としたところ、印をつけたところで、「System.InvalidOperationException」 なる例外が発生し、止まってしまいました。(デバッグで実行時) エラーの詳細を見ると、「空のDataGridViewに行を追加することはできません」 と書いてありました。 仕方なく列を追加する形にしようとしても、CellsがDataGridViewColumnにはないからImageCellをColumnにAddできないし、困っています。 どうすればよいでしょうか?

  • 【Objective-C】文法 メソッドの定義について

    Objective-Cの勉強を始めたばかりの者です。 メソッドの定義について、混乱してきたので教えてください。 例えば、二つの数値を引数に与えるメソッドsetDataを作るとします。 このメソッドを以下のような方法で呼び出します。 id data; data = [[Data alloc] init]; [data setData:3:4]; この場合のメソッドの定義は以下の様になりますよね。 - (void)setData:(int)argx:(int)argy; 次にラベルを使った引数についてですが、 - (void)setData:(int)argx y(int)argy; と定義したら、呼び出しは、 [data setData:3 y:4]; となりますよね。 この記述に違和感を感じるんです。 ここまでは前ふりでして、以下が質問になるのですが、 メソッド名とは別に二つの引数用のラベルを設ける事ってできないのですか? つまりは、例えば、 [data setData x:3 y:4]; のような感じの記述です。 それとも、「ラベルを付けられるのは二つ目の引数から」ってのが仕様なんですか? 以上、ご指導のほど、宜しくお願いいたします。

  • C#の連結リストがわかりません。

    最近、C#をちゃんとやろうと思い、勉強のためのコードを見ていたのですが以下の連結リストについてわかりません。わからないところにコメントをつけました。呼び出しメソッドはList.Add(2);です。よろしくお願いいたします。 using System; using System.IO; class Node { public int elem; public Node next; public Node() : this(0, null){}//このメソッドがある意味がわかりません。 public Node(int val, Node next) { this.elem = val; this.next = next;//なぜか最初にnextにデバッグするとnullになりますが2回目デバッグからはNodeになります。そもそもなぜクラスにクラスを代入しているかもわかりません。 } } /// <summary> /// 連結リストクラス /// </summary> class List { public Node head; public List() { head = null; } public void Add(int val) { Node node = new Node(val, this.head); this.head = node; } }

  • ポインタ変数への参照について

    現在とあるDLLを作成中なのですが、メソッドの仕様で悩んでいます。 DLL内部で不正アクセス等を極力発生させないことを考えているのですが、ポインタを引数にとるメソッドの場合、引数に不正なアドレスを渡されるとメソッド内部で引数を参照した段階で不正アクセスで落ちてしまいます。この対応は、引数を参照とすることで解決しようと思っているのですが、ダブルポインタを引数にとるメソッドで同じ考え方をすると、メソッドの仕様が理解しづらいものになってしまいます。 下記がサンプルコードです。 class Test { public: Test() { m_test = 1; } int m_test; }; void GetTest1(Test** test) //もともとの仕様はこんな形 { *test = new Test(); } void GetTest2(Test*& test) //参照渡しにすると「*&」と書かなくてはならない { test = new Test(); } int main() { Test* get1; Test* get2; GetTest1(&get1); GetTest2(get2); delete get1; delete get2; return 0; } このように、「ポインタの参照」にすれば不正なポインタを渡される心配はなくなりますが。 「*&」など(私は)見たことも無いような記述になってしまいます。 このような書き方は一般的に考えて正しいのでしょうか? (特にDLLが提供するメソッドとして)

  • 配列を引数にするとき

    ↓のようなメソッドのある時に public void method(int[] arr){} ↓のようには実行出来ると思うのですが、 int[] a = {1,2,3}; method(a); 引数に入れる時に、直接値を入れられないでしょうか? イメージ的には、 method({1,2,3}); みたいに。 よろしくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう