C#にも配列、リスト、ハッシュテーブルなどデータ構造を操作する機能が一通りありますが、 同じ操作にいくつもの方法があり奥が深そうです。
using System;
// List
using System.Collections.Generic;
using System.Linq;
// Hashtable
using System.Collections;
// Directory
using System.IO;
class Program
{
// ◆既定値付き引数を持つ関数を定義する。PHP/Python/jsと同じ方法
static string[] GetFileNames(string dir, string ext = "")
{
string[] flist;
if(ext == "")
{
flist = Directory.GetFiles(dir);
}
else
{
flist = Directory.GetFiles(dir, "*"+ext);
}
return flist;
}
// ◆可変長引数を持つ関数を定義する。paramsキーワードを使用
static int GetSum(params int[] args)
{
int sum = 0;
foreach(int v in args){ sum += v; }
return sum;
}
static void Main(string[] args)
{
// ◆文字列から"b"の文字が最初に現れる位置(先頭が0)を得る
string a = "orange melon strawberry grape";
int n = a.IndexOf("b");
Console.WriteLine(n); // 18
// ◆その位置から5文字を切り出す
string b = a.Substring(n, 5);
Console.WriteLine(b); // berry
// ◆文字列の一部置き換え
Console.WriteLine(a.Replace("mel", "lem"));
var v1 = 10.2;
var v2 = "15.3";
// C#の+はオペランドの少なくとも片方が文字列だと必ず文字列連結になる
// 数値の和にするにはParse()で変換が必要
var v3 = v1 + Double.Parse(v2);
// doubleからstringにはキャストできない。ToString()を使う
var v4 = v1.ToString() + v2;
var v5 = Double.Parse(v2) + v1;
var v6 = v2 + v1;
Console.WriteLine("{0} {1} {2} {3}", v3, v4, v5, v6);
// ◆配列の3番目の要素から3個を取り出し、文字列に連結して出力する
string[] arr = { "orange", "melon", "strawberry", "grape", "apple", "banana" };
int startIndex = 2, length = 3;
string[] arrsub = new string[length];
Array.Copy(arr, startIndex, arrsub, 0, length);
// 配列を表示。C#には配列をダンプする機能はないのでJoinで代用
Console.WriteLine(String.Join(" ", arrsub));
// ◆要素の追加
// Go同様、C#も配列に要素は追加できないのでリストに変換して追加する
List<string> alist = arr.ToList();
alist.Add("peach");
// ◆要素の検索
int index = alist.IndexOf("peach");
Console.WriteLine("index of 'peach' is:{0}", index);
//// ◆配列要素を変数に一括代入する方法は今はない
//(string e1, string e2, string e3) = arrsub;
//Console.WriteLine("{0} {1} {2}", e1, e2, e3);
Hashtable harr = new Hashtable(){ {"orange",80}, {"melon",1200}, {"strawberry",350} };
harr["grape"] = 450;
// ◆配列キーの存在有無をチェックする
Console.WriteLine(harr.ContainsKey("melon") ? "yes" : "no");
Console.WriteLine(harr.ContainsKey("lemon") ? "yes" : "no");
// ◆配列キー一覧をソートして、キーと値を出力する
// Keysの結果を直接ソートはできない。別のリストに代入してからソートする
// またKeysはメソッドではなくメンバーなので括弧は要らない
ArrayList keys = new ArrayList(harr.Keys);
keys.Sort();
foreach(var k in keys)
{
Console.WriteLine("{0}\t{1}", k, harr[k]);
}
// ◆既定値付き引数を持つ関数の使用
Console.WriteLine(String.Join(",", GetFileNames(".")));
Console.WriteLine(String.Join(",", GetFileNames(".", ".txt")));
// ◆可変長引数を持つ関数の使用
int v = GetSum(10, 11, 12, 13);
Console.WriteLine(v); // 46
}
}