[Python]オブジェクトの属性値で配列をソートする

Pythonで配列をソートするには、list.sort()やsorted()を使用する。
配列の内容が単純な文字列や数値であれば、これらの関数をそのまま使えばよいが、配列の中身がオブジェクトで、その属性値を用いてソートすることもできる。
list.sort()やsorted()の引数 key に関数を与えればよい。この関数は引数を1つだけ取り、返り値がソートのキーとして使われる。

例:
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def __repr__(self):
        return "%s(%d)" % (self.name, self.age)

persons = []
persons.append(Person('Tanaka', 40))
persons.append(Person('Yamada', 27))
persons.append(Person('Aoki', 51))
persons.append(Person('Nakamura', 36))
persons.append(Person('Suzuki', 45))

# Personオブジェクトのname属性を小文字にして比較する
print sorted(persons, key=lambda x: x.name.lower())

# Personオブジェクトのage属性で比較する
print sorted(persons, key=lambda x: x.age)

このコードの実行結果を以下に示す。
[Aoki(51), Nakamura(36), Suzuki(45), Tanaka(40), Yamada(27)]
[Yamada(27), Nakamura(36), Tanaka(40), Suzuki(45), Aoki(51)]

[Vim]正規表現に一致する行を削除する

正規表現に一致する行を削除するコマンドは、
:g/正規表現/d

逆に、一致しない行を削除するには、
:v/正規表現/d

[Java]配列をソートする

Javaには、配列をソートするメソッドが java.util.Arrays クラスの中に用意されている。

例:
import java.util.Arrays;
// (略)

int[] arr1 = {8, 4, 3, 1, 6, 2, 5, 0, 9, 7};
// 配列全体をソート
Arrays.sort(arr1);
System.out.println(Arrays.toString(arr1));
// -> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

int[] arr2 = {8, 4, 3, 1, 6, 2, 5, 0, 9, 7};
// インデックスが3から6までの要素をソート
Arrays.sort(arr2, 3, 7);
System.out.println(Arrays.toString(arr2));
// -> [8, 4, 3, 1, 2, 5, 6, 0, 9, 7]

このメソッドは、 Dual-Pivot Quicksort と呼ばれる、計算量 O(n log(n)) のアルゴリズムを提供する。

[Ruby]配列を展開して関数の引数に使う

たくさんの引数を取る関数に対して、呼び出し前に配列を使って引数を用意し、呼び出し時には配列を展開して引数を渡すことができる。その際は、配列の直前にアスタリスク(*)を付ければよい。
特に、引数の数が不定の場合などに役立つ。

例:
# 配列の入った変数に対して
a = [1, 2, 3]
sprintf('%d %d %d', *a)
# => "1 2 3"

# 配列リテラルに対して直接使うこともできる
sprintf('%d %d %d', *[1, 2, 3])
# => "1 2 3"

逆に、不定個の引数を取る関数を定義したい場合には、仮引数にアスタリスクを付ける。

例:
def hoge(*a)
  p a
end
hoge(1, 2, 3, 4)
# [1, 2, 3, 4]
この場合、渡された複数の引数が入った配列がaに入る。

[Objective-C]配列内のオブジェクトのキー値から配列を作成する

NSDictionaryが入った配列があるとき、それぞれのオブジェクトのキー値を集めた配列を取得するには、NSArrayのvalueForKey:メソッドを使う。
 配列内の各オブジェクトに対してvalueForKey:を実行して、その結果を配列として返すものである。
NSDictionary *dict1 = [NSDictionary dictionaryWithObjectsAndKeys:@"ABC", @"theKey", nil];
NSDictionary *dict2 = [NSDictionary dictionaryWithObjectsAndKeys:@"DEF", @"theKey", nil];
NSArray *anArray = [NSArray arrayWithObjects:dict1, dict2, nil];
NSLog(@"%@", [anArray valueForKey:@"theKey"]);
この例では、ABCとDEFが入った配列が返る。

応用例
特定のキーの値を持つオブジェクトを配列の中から探す。
 [[anArray valueForKey:@"theKey"] indexOfObject:@"theValue"]; 

この例では、キー"theKey"の値がtheValueである辞書が配列内で最初に現れる位置を返す。

[jQuery]jQueryのバージョンを確認する

ブラウザで開いているページがjQueryを使っているか確認する歳に、下記のコードをブラウザの開発者ツールのコンソールで実行すると、jQueryのバージョンを確認できる。

$().jquery

ページがjQueryを読み込んでいれば、ブックマークレットを作成する際にいきなり「$」が使えるので便利である。

[Ruby]文字列内で正規表現に一致するパターンを全て抽出する

HTMLファイルに出現する特定のタグをすべて抜き出したいときなど、文字列内で繰り返し出現するパターンを正規表現を用いてすべて抽出するには、 String#scan を使う。一致したパターンが全て入った配列が取得できる。

例:
>> '1<img src="1.jpg"><br>2<img src="2.jpg">'.scan(/<img.*?>/)
=> ["<img src=\"1.jpg\">", "<img src=\"2.jpg\">"]