文書更新:2020年04月18日(土) 午前10時07分19秒

Home > 備忘録 > 言語関連 > 言語共通 > ハッシュ、連想配列、辞書オブジェクトのソート1( 50 )

ハッシュオブジェクト、連想配列、辞書オブジェクトのソートについて、まとめてみた。

ハッシュ、連想配列、辞書オブジェクトのソート1

  1. ruby 版
  2. メソッド to_h はソート結果をハッシュに戻す。
    ソートデータ
    zipcode={
    "135-0064"=>"東京都江東区青海",
    "380-0941"=>"長野県長野市安茂里",
    "270-0151"=>"千葉県流山市後平井",
    "928-0032"=>"石川県輪島市小伊勢町",
    "920-1132"=>"石川県金沢市朝加屋町",
    "670-0944"=>"兵庫県姫路市阿保"
    }
    zipcode.store("675-0024","兵庫県加古川市尾上町長田")	←要素を追加
    zipcode["162-0812"]="東京都新宿区西五軒町"	←要素を追加
    keyの昇順
    zipcode.sort_by{|key,val| key }.to_h.each_pair { |key, val|
    	puts "〒"+key+" 住所:"+val
    }
    #または
    zipcode.sort{|a,b| a[0]<=>b[0]}.to_h.each_pair { |key, val|
    	puts "〒"+key+" 住所:"+val
    }
    [結果表示]
    〒135-0064 住所:東京都江東区青海
    〒162-0812 住所:東京都新宿区西五軒町
    〒270-0151 住所:千葉県流山市後平井
    〒380-0941 住所:長野県長野市安茂里
    〒670-0944 住所:兵庫県姫路市阿保
    〒675-0024 住所:兵庫県加古川市尾上町長田
    〒920-1132 住所:石川県金沢市朝加屋町
    〒928-0032 住所:石川県輪島市小伊勢町
    keyの降順
    zipcode.sort_by{|key,val| key }.reverse.to_h.each_pair { |key, val|
    	puts "〒"+key+" 住所:"+val
    }
    #または
    zipcode.sort{|a,b| b[0]<=>a[0]}.to_h.each_pair { |key, val|
    	puts "〒"+key+" 住所:"+val
    }
    [結果表示]
    〒928-0032 住所:石川県輪島市小伊勢町
    〒920-1132 住所:石川県金沢市朝加屋町
    〒675-0024 住所:兵庫県加古川市尾上町長田
    〒670-0944 住所:兵庫県姫路市阿保
    〒380-0941 住所:長野県長野市安茂里
    〒270-0151 住所:千葉県流山市後平井
    〒162-0812 住所:東京都新宿区西五軒町
    〒135-0064 住所:東京都江東区青海
    valueの昇順
    zipcode.sort_by{|key,val| val }.to_h.each_pair { |key, val|
    	puts "〒"+key+" 住所:"+val
    }
    #または
    zipcode.sort{|a,b| a[1]<=>b[1]}.to_h.each_pair { |key, val|
    	puts "〒"+key+" 住所:"+val
    }
    [結果表示]
    〒675-0024 住所:兵庫県加古川市尾上町長田
    〒670-0944 住所:兵庫県姫路市阿保
    〒270-0151 住所:千葉県流山市後平井
    〒162-0812 住所:東京都新宿区西五軒町
    〒135-0064 住所:東京都江東区青海
    〒928-0032 住所:石川県輪島市小伊勢町
    〒920-1132 住所:石川県金沢市朝加屋町
    〒380-0941 住所:長野県長野市安茂里
    valuの降順
    zipcode.sort_by{|key,val| val }.reverse.to_h.each_pair { |key, val|
    	puts "〒"+key+" 住所:"+val
    }
    #または
    zipcode.sort{|a,b| b[1]<=>a[1]}.to_h.each_pair { |key, val|
    	puts "〒"+key+" 住所:"+val
    }
    [結果表示]
    〒380-0941 住所:長野県長野市安茂里
    〒920-1132 住所:石川県金沢市朝加屋町
    〒928-0032 住所:石川県輪島市小伊勢町
    〒135-0064 住所:東京都江東区青海
    〒162-0812 住所:東京都新宿区西五軒町
    〒270-0151 住所:千葉県流山市後平井
    〒670-0944 住所:兵庫県姫路市阿保
    〒675-0024 住所:兵庫県加古川市尾上町長田
  3. php 版( 連想配列 )
  4. ソートデータ
    $zipcode=array(
    "135-0064"=>"東京都江東区青海",
    "380-0941"=>"長野県長野市安茂里",
    "270-0151"=>"千葉県流山市後平井",
    "928-0032"=>"石川県輪島市小伊勢町",
    "920-1132"=>"石川県金沢市朝加屋町",
    "670-0944"=>"兵庫県姫路市阿保"
    );
    $zipcode+=array("675-0024"=>"兵庫県加古川市尾上町長田");	←要素を追加
    $zipcode["162-0812"]="東京都新宿区西五軒町";	←要素を追加
    keyの昇順
    ksort($zipcode);
    foreach($zipcode as $key => $val){
    	print "〒$key 住所:$val\n";
    }
    keyの降順
    krsort($zipcode);
    foreach($zipcode as $key => $val){
    	print "〒$key 住所:$val\n";
    }
    valueの昇順
    asort($zipcode);
    foreach($zipcode as $key => $val){
    	print "〒$key 住所:$val\n";
    }
    valueの降順
    arsort($zipcode);
    foreach($zipcode as $key => $val){
    	print "〒$key 住所:$val";
    }
  5. perl 版
  6. ソートデータ
    my %zipcode=(
    "135-0064"=>"東京都江東区青海",
    "380-0941"=>"長野県長野市安茂里",
    "270-0151"=>"千葉県流山市後平井",
    "928-0032"=>"石川県輪島市小伊勢町",
    "920-1132"=>"石川県金沢市朝加屋町",
    "670-0944"=>"兵庫県姫路市阿保"
    );
    $zipcode{"675-0024"}="兵庫県加古川市尾上町長田";	←要素を追加
    $zipcode{"162-0812"}="東京都新宿区西五軒町";	←要素を追加
    keyの昇順
    foreach my $key(sort keys(%zipcode)){
    	print "〒$key, 住所:$zipcode{$key}\n";
    }
    keyの降順
    foreach my $key(reverse sort keys(%zipcode)){
    	print "〒$key, 住所:$zipcode{$key}\n";
    }
    valueの昇順
    #perlは日本語のソートに対応していないでソートされていない。日本語以外では大丈夫です。
    foreach my $key(sort { $zipcode{$a} cmp $zipcode{$b} } keys %zipcode){
    	print "〒$key, 住所:$zipcode{$key}\n";
    }
    valueの降順
    #perlは日本語のソートに対応していないでソートされていない。日本語以外では大丈夫です。
    foreach my $key(reverse sort { $zipcode{$a} cmp $zipcode{$b} } keys %zipcode){
    	print "〒$key, 住所:$zipcode{$key}\n";
    }
  7. python 版( 辞書オブジェクト )
  8. ソートデータ
    zipcode={
    "135-0064":"東京都江東区青海",
    "380-0941":"長野県長野市安茂里",
    "270-0151":"千葉県流山市後平井",
    "928-0032":"石川県輪島市小伊勢町",
    "920-1132":"石川県金沢市朝加屋町",
    "670-0944":"兵庫県姫路市阿保"
    }
    zipcode.update({"675-0024":"兵庫県加古川市尾上町長田"});	←辞書オブジェクトの連結(複数個追加できる)
    zipcode["162-0812"]="東京都新宿区西五軒町";	←要素を追加
    reverseオプション
    True降順でソート
    False昇順でソート
    省略昇順でソート
    keys辞書に含まれるkeyをリスト型のオブジェクトとして取得
    values辞書に含まれるvalueをリスト型のオブジェクトとして取得
    items辞書に含まれるkeyとvalueをタプル型のオブジェクトとして取得
    keyの昇順
    for k, v in sorted(zipcode.items(),reverse=True):
        print "〒="+k+",住所="+v
    #または
    for k, v in sorted(zipcode.items(),key=lambda x: x[0],reverse=True):
        print "〒="+k+",住所="+v
    keyの降順
    for k, v in sorted(zipcode.items(),reverse=False):
        print "〒="+k+",住所="+v
    #または
    for k, v in sorted(zipcode.items(),key=lambda x: x[0],reverse=False):
        print "〒="+k+",住所="+v
    valueの昇順
    for k, v in sorted(zipcode.items(),key=lambda x: x[1],reverse=True):
        print "〒="+k+",住所="+v
    valueの降順
    for k, v in sorted(zipcode.items(),key=lambda x: x[1],reverse=False):
        print "〒="+k+",住所="+v