プログラミング言語の比較 > リスト(または配列)

2つのリストを結合した新しいリストを作る

Java

  1. // import java.util.stream.IntStream;
  2. IntStream stream1 = IntStream.of(1, 2, 3);
  3. IntStream stream2 = IntStream.of(2, 1, 4);
  4. IntStream result = IntStream.concat(stream1, stream2);
  1. // import java.util.stream.IntStream;
  2. // import java.util.stream.Stream;
  3. IntStream stream1 = IntStream.of(1, 2, 3);
  4. IntStream stream2 = IntStream.of(2, 1, 4);
  5. IntStream result = Stream.of(stream1, stream2).flatMapToInt(s -> s);

Groovy

  1. def list1 = [1, 2, 3]
  2. def list2 = [2, 1, 4]
  3. def result = list1 + list2

Kotlin

  1. val list1 = listOf(1, 2, 3)
  2. val list2 = listOf(2, 1, 4)
  3. val result = list1 + list2

Scala

  1. val list1 = List(1, 2, 3)
  2. val list2 = List(2, 1, 4)
  3. val result = list1 ::: list2

Erlang

  1. List1 = [1, 2, 3],
  2. List2 = [2, 1, 4],
  3. Result = List1 ++ List2.

Haskell

  1. let list1 = [1, 2, 3]
  2. let list2 = [2, 1, 4]
  3. let result = list1 ++ list2

PowerShell

  1. $array1 = 1, 2, 3
  2. $array2 = 2, 1, 4
  3. $result = $array1 + $array2

F#

  1. let list1 = [1; 2; 3]
  2. let list2 = [2; 1; 4]
  3. let result = list1 @ list2

C#

  1. // using System.Linq;
  2. int[] array1 = { 1, 2, 3 };
  3. int[] array2 = { 2, 1, 4 };
  4. var result = array1.Concat(array2); // result の型は IEnumerable<int>

C++

  1. #include <vector>
  2. int array1[] = {1, 2, 3};
  3. int array2[] = {2, 1, 4};
  4. vector<int> result;
  5. result.insert(result.end(), array1, array1 + 3);
  6. result.insert(result.end(), array2, array2 + 3);

Go

  1. // import "container/list"
  2. array1 := [...]int{1, 2, 3}
  3. array2 := [...]int{2, 1, 4}
  4. result := list.New()
  5. for _, x := range(array1) {
  6. result.PushBack(x)
  7. }
  8. for _, x := range(array2) {
  9. result.PushBack(x)
  10. }

Rust

  1. let mut vec1 = vec![1, 2, 3];
  2. let mut vec2 = vec![2, 1, 4];
  3. vec1.append(&mut vec2);

Dart

  1. var list1 = [1, 2, 3];
  2. var list2 = [2, 1, 4];
  3. var result = List.from(list1);
  4. result.addAll(list2);

TypeScript

  1. let array1 = [1, 2, 3];
  2. let array2 = [2, 1, 4];
  3. let result = array1.concat(array2);
  1. let array1 = [1, 2, 3];
  2. let array2 = [2, 1, 4];
  3. let result = [...array1, ...array2];

JavaScript

  1. let array1 = [1, 2, 3];
  2. let array2 = [2, 1, 4];
  3. let result = array1.concat(array2);
  1. let array1 = [1, 2, 3];
  2. let array2 = [2, 1, 4];
  3. let result = [...array1, ...array2];

CoffeeScript

  1. array1 = [1, 2, 3]
  2. array2 = [2, 1, 4]
  3. result = array1.concat array2
  1. array1 = [1, 2, 3]
  2. array2 = [2, 1, 4]
  3. result = [...array1, ...array2]

Ruby

  1. array1 = [1, 2, 3]
  2. array2 = [2, 1, 4]
  3. result = array1 + array2

Python

  1. list1 = [1, 2, 3]
  2. list2 = [2, 1, 4]
  3. result = list1 + list2

PHP

  1. $array1 = [1, 2, 3];
  2. $array2 = [2, 1, 4];
  3. $result = array_merge($array1, $array2);
PHP 7.4以降
  1. $array1 = [1, 2, 3];
  2. $array2 = [2, 1, 4];
  3. $result = [...$array1, ...$array2];

Perl

  1. my @array1 = (1, 2, 3);
  2. my @array2 = (2, 1, 4);
  3. my @result = (@array1, @array2);

リスト内の文字列を短い順に出力する(元のリストを変更しない)

Java

安定ソート
  1. // import java.util.stream.Stream;
  2. Stream<String> stream = Stream.of("March", "April", "May", "June", "July");
  3. Stream<String> newStream = stream.sorted(Comparator.comparing(s -> s.length()));
  4. newStream.forEach(System.out::println);
Guava を使った場合
安定ソート
  1. // import com.google.common.base.Function;
  2. // import com.google.common.collect.Ordering;
  3. List<String> list = Arrays.asList("March", "April", "May", "June", "July");
  4. Ordering<String> ordering = Ordering.natural().onResultOf(input -> input.length());
  5. List<String> result = ordering.sortedCopy(list);
  6. result.forEach(System.out::println);

Groovy

  1. def list = ['March', 'April', 'May', 'June', 'July']
  2. def newList = list.clone() // リストをコピーする
  3. newList.sort { it.length() }.each { println it }

Kotlin

安定ソート
  1. val list = listOf("March", "April", "May", "June", "July")
  2. list.sortedBy { it.length }.forEach(::println)

Scala

安定ソート
  1. val list = List("March", "April", "May", "June", "July")
  2. list.sortBy(_.length).foreach(println)
  1. val list = List("March", "April", "May", "June", "July")
  2. list.sortWith(_.length < _.length).foreach(println)

Erlang

安定でないソート
  1. List = ["March", "April", "May", "June", "July"],
  2. Sorted = lists:sort(fun(X, Y) -> length(X) =< length(Y) end, List),
  3. lists:foreach(fun(S) -> io:format("~s~n", [S]) end, Sorted).

Haskell

安定ソート
  1. -- import List
  2. let list = ["March", "April", "May", "June", "July"]
  3. let result = sortBy (\ x y -> compare (length x) (length y)) list
  4. mapM_ putStrLn result

PowerShell

  1. $array = 'March', 'April', 'May', 'June', 'July'
  2. $array | sort Length

F#

  1. let list = ["March"; "April"; "May"; "June"; "July"]
  2. list |> List.sortBy String.length |> List.iter (printfn "%s")
  1. let list = ["March"; "April"; "May"; "June"; "July"]
  2. for s in List.sortBy String.length list do printfn "%s" s
F# 3.0以降
  1. let list = ["March"; "April"; "May"; "June"; "July"]
  2. Seq.iter ignore <| query { for s in list do
  3. sortBy s.Length
  4. select (printfn "%s" s) }

C#

安定ソート
  1. // using System.Linq;
  2. string[] array = { "March", "April", "May", "June", "July" };
  3. foreach (string s in array.OrderBy(s => s.Length)) {
  4. Console.WriteLine(s);
  5. }
  1. // using System.Linq;
  2. string[] array = { "March", "April", "May", "June", "July" };
  3. var query = from s in array orderby s.Length select s; // query の型は IOrderedEnumerable<string>
  4. foreach (string s in query) {
  5. Console.WriteLine(s);
  6. }

C++

  1. bool length_ascending(const string& x, const string& y) {
  2. return x.length() < y.length();
  3. }
安定でないソート
  1. #include <algorithm>
  2. #include <vector>
  3. const int N = 5;
  4. string array[N] = {"March", "April", "May", "June", "July"};
  5. vector<string> v(array, array + N);
  6. sort(v.begin(), v.end(), length_ascending);
  7. for (vector<string>::iterator it = v.begin(); it != v.end(); it++) {
  8. cout << *it << endl;
  9. }
安定ソート
  1. #include <algorithm>
  2. #include <vector>
  3. const int N = 5;
  4. string array[N] = {"March", "April", "May", "June", "July"};
  5. vector<string> v(array, array + N);
  6. stable_sort(v.begin(), v.end(), length_ascending);
  7. for (vector<string>::iterator it = v.begin(); it != v.end(); it++) {
  8. cout << *it << endl;
  9. }

Go

専用の型を用意する
  1. // インターフェース sort.Interface を実装する
  2. type LengthAscending []string
  3. func (this LengthAscending) Len() int {
  4. return len(this)
  5. }
  6. func (this LengthAscending) Less(i, j int) bool {
  7. return len(this[i]) < len(this[j])
  8. }
  9. func (this LengthAscending) Swap(i, j int) {
  10. this[i], this[j] = this[j], this[i]
  11. }
  1. // import "sort"
  2. array := [...]string{"March", "April", "May", "June", "July"}
  3. newArray := array // 配列をコピーする
  4. sort.Sort(LengthAscending(newArray[:]))
  5. for _, s := range newArray {
  6. fmt.Printf("%s\n", s)
  7. }
汎用的な型を用意する
  1. // インターフェース sort.Interface を実装する
  2. type StringSort struct {
  3. array []string
  4. less func(a, b *string) bool // 関数型のフィールド
  5. }
  6. func (this *StringSort) Len() int {
  7. return len(this.array)
  8. }
  9. func (this *StringSort) Less(i, j int) bool {
  10. return this.less(&this.array[i], &this.array[j])
  11. }
  12. func (this *StringSort) Swap(i, j int) {
  13. this.array[i], this.array[j] = this.array[j], this.array[i]
  14. }
  1. // import "sort"
  2. array := [...]string{"March", "April", "May", "June", "July"}
  3. newArray := array // 配列をコピーする
  4. sort.Sort(&StringSort{newArray[:], func(a, b *string) bool {
  5. return len(*a) < len(*b)
  6. }})
  7. for _, s := range newArray {
  8. fmt.Printf("%s\n", s)
  9. }

Rust

安定ソート
  1. let array = ["March", "April", "May", "June", "July"];
  2. let mut vec = array.to_vec();
  3. vec.sort_by_key(|s| s.chars().count());

Dart

安定でないソート
  1. var list = ['March', 'April', 'May', 'June', 'July'];
  2. var newList = List.from(list); // リストをコピーする
  3. newList.sort((a, b) => a.length - b.length);
  4. newList.forEach(print);

TypeScript

安定ソート(ただし Internet Explorer を除く)
  1. let array = ['March', 'April', 'May', 'June', 'July'];
  2. let newArray = array.slice(0); // 配列をコピーする
  3. newArray.sort((x, y) => x.length - y.length);
  4. newArray.forEach(s => console.log(s));
Underscore を使った場合
  1. // import * as _ from 'underscore';
  2. let array = ['March', 'April', 'May', 'June', 'July'];
  3. _.sortBy(array, s => s.length).forEach(s => console.log(s));

JavaScript

安定ソート(ただし Internet Explorer を除く)
  1. let array = ['March', 'April', 'May', 'June', 'July'];
  2. let newArray = array.slice(0); // 配列をコピーする
  3. newArray.sort((x, y) => x.length - y.length);
  4. newArray.forEach(s => console.log(s));
Underscore を使った場合
  1. // const _ = require('underscore');
  2. let array = ['March', 'April', 'May', 'June', 'July'];
  3. _.sortBy(array, s => s.length).forEach(s => console.log(s));

CoffeeScript

安定ソート(ただし Internet Explorer を除く)
  1. array = ['March', 'April', 'May', 'June', 'July']
  2. newArray = array.slice 0
  3. newArray.sort (x, y) -> x.length - y.length
  4. console.log s for s in newArray
Underscore を使った場合
  1. # _ = require 'underscore'
  2. array = ['March', 'April', 'May', 'June', 'July']
  3. console.log s for s in _.sortBy array, (s) -> s.length

Ruby

安定でないソート
  1. array = %w[March April May June July]
  2. puts array.sort_by {|s| s.length }
安定でないソート
Ruby 2.7以降
  1. array = %w[March April May June July]
  2. puts array.sort_by { _1.length }

Python

安定ソート
  1. l = ['March', 'April', 'May', 'June', 'July']
  2. for s in sorted(l, key = len):
  3. print(s)

PHP

安定でないソート
  1. $array = ['March', 'April', 'May', 'June', 'July'];
  2. $newArray = $array; // 配列をコピーする
  3. usort($newArray, function($a, $b) { return strlen($a) - strlen($b); });
  4. foreach ($newArray as $s) {
  5. echo $s, "\n";
  6. }
PHP 7.4以降
  1. $array = ['March', 'April', 'May', 'June', 'July'];
  2. $newArray = $array; // 配列をコピーする
  3. usort($newArray, fn($a, $b) => strlen($a) - strlen($b));
  4. foreach ($newArray as $s) {
  5. echo $s, "\n";
  6. }

Perl

Perl 5.6までは安定でないソート、Perl 5.7以降は安定ソート
  1. my @array = qw/March April May June July/;
  2. for (sort { length($a) <=> length($b) } @array) {
  3. print "$_\n";
  4. }
  1. my @array = qw/March April May June July/;
  2. print "$_\n" for sort { length($a) <=> length($b) } @array;
  1. my @array = qw/March April May June July/;
  2. print "$_\n" for # ここは、下から順に読む
  3. map $_->[0], # 3. 各ペアの前側だけ残す
  4. sort { $a->[1] <=> $b->[1] } # 2. ペアの後ろ側(長さ)でソートする
  5. map [$_, length], @array; # 1. 文字列とその長さのペアの配列にする

リスト内の文字列を短い順・辞書順に出力する(元のリストを変更して良い)

Java

  1. // import java.util.stream.Stream;
  2. Stream<String> stream = Stream.of("March", "April", "May", "June", "July");
  3. Stream<String> newStream = stream.sorted(
  4. Comparator.comparing((String s) -> s.length()).thenComparing(s -> s));
  5. newStream.forEach(System.out::println);
Guava を使った場合
  1. // import com.google.common.base.Function;
  2. // import com.google.common.collect.Ordering;
  3. List<String> list = Arrays.asList("March", "April", "May", "June", "July");
  4. Ordering<String> ordering = Ordering.natural()
  5. .onResultOf((String input) -> input.length()).compound(Ordering.natural());
  6. List<String> result = ordering.sortedCopy(list);
  7. result.forEach(System.out::println);

Groovy

  1. def list = ['March', 'April', 'May', 'June', 'July']
  2. list.sort { x, y ->
  3. x.length() <=> y.length() ?: x <=> y
  4. }.each { println it }

Kotlin

安定ソート
  1. val list = listOf("March", "April", "May", "June", "July")
  2. list.sortedWith(compareBy({ it.length }, { it })).forEach(::println)

Scala

安定ソート
  1. val list = List("March", "April", "May", "June", "July")
  2. list.sortBy(s => (s.length, s)).foreach(println)

Erlang

  1. List = ["March", "April", "May", "June", "July"],
  2. F = fun(X, Y) ->
  3. LenX = length(X),
  4. LenY = length(Y),
  5. LenX < LenY orelse LenX =:= LenY andalso X =< Y
  6. end,
  7. Sorted = lists:sort(F, List),
  8. lists:foreach(fun(S) -> io:format("~s~n", [S]) end, Sorted).

Haskell

安定ソート
  1. -- import List
  2. let list = ["March", "April", "May", "June", "July"]
  3. let result = sortBy (\ x y -> compare (length x, x) (length y, y)) list
  4. mapM_ putStrLn result

PowerShell

  1. $array = 'March', 'April', 'May', 'June', 'July'
  2. $array | sort Length, { $_ }

F#

  1. let list = ["March"; "April"; "May"; "June"; "July"]
  2. list |> List.sortBy (fun s -> (s.Length, s)) |> List.iter (printfn "%s")
  1. let list = ["March"; "April"; "May"; "June"; "July"]
  2. for s in list |> List.sortBy (fun s -> (s.Length, s)) do printfn "%s" s
F# 3.0以降
  1. let list = ["March"; "April"; "May"; "June"; "July"]
  2. Seq.iter ignore <| query { for s in list do
  3. sortBy s.Length
  4. thenBy s
  5. select (printfn "%s" s) }

C#

安定ソート
  1. // using System.Linq;
  2. string[] array = { "March", "April", "May", "June", "July" };
  3. foreach (var s in array.OrderBy(s => s.Length).ThenBy(s => s)) {
  4. Console.WriteLine(s);
  5. }
  1. // using System.Linq;
  2. string[] array = { "March", "April", "May", "June", "July" };
  3. var query = from s in array orderby s.Length, s select s; // query の型は IEnumerable<string>
  4. foreach (var s in query) {
  5. Console.WriteLine(s);
  6. }

C++

  1. bool length_value_ascending(const string& x, const string& y) {
  2. int result = x.length() - y.length();
  3. return result == 0 ? x < y : result < 0;
  4. }
安定でないソート
  1. #include <algorithm>
  2. const int N = 5;
  3. string array[N] = {"March", "April", "May", "June", "July"};
  4. sort(array, array + N, length_value_ascending);
  5. for (int i = 0; i < N; i++) {
  6. cout << array[i] << endl;
  7. }
安定ソート
  1. #include <algorithm>
  2. const int N = 5;
  3. string array[N] = {"March", "April", "May", "June", "July"};
  4. stable_sort(array, array + N, length_value_ascending);
  5. for (int i = 0; i < N; i++) {
  6. cout << array[i] << endl;
  7. }

Go

専用の型を用意する
  1. // インターフェース sort.Interface を実装する
  2. type LengthValueAscending []string
  3. func (this LengthValueAscending) Len() int {
  4. return len(this)
  5. }
  6. func (this LengthValueAscending) Less(i, j int) bool {
  7. result := len(this[i]) - len(this[j])
  8. if result == 0 {
  9. return this[i] < this[j]
  10. }
  11. return result < 0
  12. }
  13. func (this LengthValueAscending) Swap(i, j int) {
  14. this[i], this[j] = this[j], this[i]
  15. }
  1. // import "sort"
  2. array := [...]string{"March", "April", "May", "June", "July"}
  3. sort.Sort(LengthValueAscending(array[:]))
  4. for _, s := range array {
  5. fmt.Printf("%s\n", s)
  6. }
汎用的な型を用意する
  1. // インターフェース sort.Interface を実装する
  2. type StringSort struct {
  3. array []string
  4. less func(a, b *string) bool // 関数型のフィールド
  5. }
  6. func (this *StringSort) Len() int {
  7. return len(this.array)
  8. }
  9. func (this *StringSort) Less(i, j int) bool {
  10. return this.less(&this.array[i], &this.array[j])
  11. }
  12. func (this *StringSort) Swap(i, j int) {
  13. this.array[i], this.array[j] = this.array[j], this.array[i]
  14. }
  1. // import "sort"
  2. array := [...]string{"March", "April", "May", "June", "July"}
  3. sort.Sort(&StringSort{array[:], func(a, b *string) bool {
  4. result := len(*a) - len(*b)
  5. if result == 0 {
  6. return *a < *b
  7. }
  8. return result < 0
  9. }})
  10. for _, s := range array {
  11. fmt.Printf("%s\n", s)
  12. }

Rust

安定ソート
  1. let mut vec = vec!["March", "April", "May", "June", "July"];
  2. vec.sort_by(|a, b| {
  3. let ta = (a.chars().count(), a);
  4. let tb = (b.chars().count(), b);
  5. ta.cmp(&tb)
  6. });

Dart

安定でないソート
  1. var list = ['March', 'April', 'May', 'June', 'July'];
  2. list.sort((a, b) {
  3. var result = a.length - b.length;
  4. if (result == 0) {
  5. result = a.compareTo(b);
  6. }
  7. return result;
  8. });
  9. list.forEach(print);

TypeScript

安定ソート(ただし Internet Explorer を除く)
  1. let array = ['March', 'April', 'May', 'June', 'July'];
  2. array.sort((x, y) => {
  3. let result = x.length - y.length;
  4. if (result == 0) {
  5. result = x < y ? -1 : x > y ? 1 : 0;
  6. }
  7. return result;
  8. });
  9. for (let i in array) {
  10. console.log(array[i]);
  11. }
Underscore を使った場合
  1. // import * as _ from 'underscore';
  2. let array = ['March', 'April', 'May', 'June', 'July'];
  3. _.sortBy(array, s => [s.length, s]).forEach(s => console.log(s));

JavaScript

安定ソート(ただし Internet Explorer を除く)
  1. let array = ['March', 'April', 'May', 'June', 'July'];
  2. array.sort((x, y) => {
  3. let result = x.length - y.length;
  4. if (result == 0) {
  5. result = x < y ? -1 : x > y ? 1 : 0;
  6. }
  7. return result;
  8. });
  9. for (let i in array) {
  10. console.log(array[i]);
  11. }
Underscore を使った場合
  1. // const _ = require('underscore');
  2. let array = ['March', 'April', 'May', 'June', 'July'];
  3. _.sortBy(array, s => [s.length, s]).forEach(s => console.log(s));

CoffeeScript

安定ソート(ただし Internet Explorer を除く)
  1. array = ['March', 'April', 'May', 'June', 'July']
  2. array.sort (x, y) ->
  3. result = x.length - y.length
  4. result = (if x < y then -1 else
  5. if x > y then 1 else 0) if result == 0
  6. result
  7. console.log s for s in array
Underscore を使った場合
  1. # _ = require 'underscore'
  2. array = ['March', 'April', 'May', 'June', 'July']
  3. console.log s for s in _.sortBy array, (s) -> [s.length, s]

Ruby

安定でないソート
  1. array = %w[March April May June July]
  2. puts array.sort_by {|s| [s.length, s] }
安定でないソート
Ruby 2.7以降
  1. array = %w[March April May June July]
  2. puts array.sort_by { [_1.length, _1] }

Python

安定ソート
  1. l = ['March', 'April', 'May', 'June', 'July']
  2. l.sort(key = lambda s: [len(s), s])
  3. for s in l:
  4. print(s)

PHP

安定でないソート
  1. $array = ['March', 'April', 'May', 'June', 'July'];
  2. usort($array, function($a, $b) {
  3. $result = strlen($a) - strlen($b);
  4. return $result === 0 ? strcmp($a, $b) : $result;
  5. });
  6. foreach ($array as $s) {
  7. echo $s, "\n";
  8. }

Perl

Perl 5.6までは安定でないソート、Perl 5.7以降は安定ソート
  1. my @array = qw/March April May June July/;
  2. for (sort { length($a) <=> length($b) or $a cmp $b } @array) {
  3. print "$_\n";
  4. }
  1. my @array = qw/March April May June July/;
  2. print "$_\n" for sort { length($a) <=> length($b) or $a cmp $b } @array;
  1. my @array = qw/March April May June July/;
  2. print "$_\n" for # ここは下から順に読む
  3. map $_->[0], # 3. 各ペアの前側だけ残す
  4. sort { $a->[1] <=> $b->[1] or $a->[0] cmp $b->[0] } # 2. 短い順、文字列の昇順にソートする
  5. map [$_, length], @array; # 1. 文字列とその長さのペアの配列にする

リストから最も長い文字列を1つだけ取り出す

Java

  1. // import java.util.stream.Stream;
  2. Stream<String> stream = Stream.of("March", "April", "May", "June", "July");
  3. String result = stream.max(Comparator.comparing(s -> s.length())).get();
  1. List<String> list = Arrays.asList("March", "April", "May", "June", "July");
  2. String result = Collections.max(list, Comparator.comparing(s -> s.length()));
Guava を使った場合
  1. // import com.google.common.base.Function;
  2. // import com.google.common.collect.Ordering;
  3. List<String> list = Arrays.asList("March", "April", "May", "June", "July");
  4. Ordering<String> ordering = Ordering.natural().onResultOf(input -> input.length());
  5. String result = ordering.max(list);

Groovy

  1. def list = ['March', 'April', 'May', 'June', 'July']
  2. def result = list.max { it.length() }

Kotlin

Kotlin 1.4以降
  1. val list = listOf("March", "April", "May", "June", "July")
  2. val result = list.maxByOrNull { it.length }!!
Kotlin 1.3まで
  1. val list = listOf("March", "April", "May", "June", "July")
  2. val result = list.maxBy { it.length }!!

Scala

  1. val list = List("March", "April", "May", "June", "July")
  2. val result = list.maxBy(_.length)
  1. val list = List("March", "April", "May", "June", "July")
  2. val result = list.max(Ordering.by((_: String).length))
  1. val list = List("March", "April", "May", "June", "July")
  2. val result = list.reduceLeft((x, y) => if (x.length > y.length) x else y)
  1. val list = List("March", "April", "May", "June", "July")
  2. val result = list.sortBy(_.length).last

Erlang

  1. List = ["March", "April", "May", "June", "July"],
  2. [Result|_] = lists:sort(fun(X, Y) -> length(X) > length(Y) end, List).
  1. List = ["March", "April", "May", "June", "July"],
  2. Longer = fun(X, Y) -> %% 2つの文字列のうち長い方を選ぶ関数
  3. if
  4. length(X) > length(Y) -> X;
  5. true -> Y
  6. end
  7. end,
  8. Result = lists:foldl(Longer, "", List).

Haskell

  1. -- import List
  2. let list = ["March", "April", "May", "June", "July"]
  3. let result = maximumBy (\ x y -> compare (length x) (length y)) list

PowerShell

  1. $array = 'March', 'April', 'May', 'June', 'July'
  2. $result = ($array | sort Length -Descending)[0]

F#

  1. let list = ["March"; "April"; "May"; "June"; "July"]
  2. let result = List.maxBy String.length list
  1. let list = ["March"; "April"; "May"; "June"; "July"]
  2. let result = list |> List.maxBy String.length
F# 3.0以降
  1. let list = ["March"; "April"; "May"; "June"; "July"]
  2. let result = query { for s in list do
  3. sortByDescending s.Length
  4. head }

C#

  1. // using System.Linq;
  2. string[] array = { "March", "April", "May", "June", "July" };
  3. var result = array.Aggregate((x, y) => x.Length > y.Length ? x : y);
  1. // using System.Linq;
  2. string[] array = { "March", "April", "May", "June", "July" };
  3. var result = (from s in array orderby s.Length descending select s).First();
  1. // using System.Linq;
  2. string[] array = { "March", "April", "May", "June", "July" };
  3. var result = array.OrderByDescending(s => s.Length).First();
  1. // using System.Linq;
  2. string[] array = { "March", "April", "May", "June", "July" };
  3. var maxLength = array.Max(s => s.Length);
  4. var result = array.First(s => s.Length == maxLength);

C++

  1. bool length_ascending(const string& x, const string& y) {
  2. return x.length() < y.length();
  3. }
  1. #include <algorithm>
  2. const int N = 5;
  3. string array[N] = {"March", "April", "May", "June", "July"};
  4. string* result = max_element(array, array + N, length_ascending);

Go

  1. array := [...]string{"March", "April", "May", "June", "July"}
  2. var result string
  3. maxLength := -1
  4. for _, s := range(array) {
  5. if len(s) > maxLength {
  6. maxLength = len(s)
  7. result = s
  8. }
  9. }

Rust

  1. let array = ["March", "April", "May", "June", "July"];
  2. let result = array.iter().max_by_key(|s| s.chars().count()).unwrap();

Dart

  1. var list = ['March', 'April', 'May', 'June', 'July'];
  2. list.sort((a, b) => b.length - a.length);
  3. var result = list[0];

TypeScript

  1. let array = ['March', 'April', 'May', 'June', 'July'];
  2. array.sort((x, y) => x.length - y.length); // 短い順に並べる
  3. let result = array.pop(); // 最後の要素を取り出す
Underscore を使った場合
  1. // import * as _ from 'underscore';
  2. let array = ['March', 'April', 'May', 'June', 'July'];
  3. let result = _.max(array, s => s.length);

JavaScript

  1. let array = ['March', 'April', 'May', 'June', 'July'];
  2. array.sort((x, y) => x.length - y.length); // 短い順に並べる
  3. let result = array.pop(); // 最後の要素を取り出す
Underscore を使った場合
  1. // const _ = require('underscore');
  2. let array = ['March', 'April', 'May', 'June', 'July'];
  3. let result = _.max(array, s => s.length);

CoffeeScript

  1. array = ['March', 'April', 'May', 'June', 'July']
  2. array.sort (x, y) -> x.length - y.length # 短い順に並べる
  3. result = array.pop() # 最後の要素を取り出す
Underscore を使った場合
  1. # _ = require 'underscore'
  2. array = ['March', 'April', 'May', 'June', 'July']
  3. result = _.max array, (s) => s.length

Ruby

  1. array = %w[March April May June July]
  2. result = array.max_by {|s| s.length }
Ruby 2.7以降
  1. array = %w[March April May June July]
  2. result = array.max_by { _1.length }

Python

  1. l = ['March', 'April', 'May', 'June', 'July']
  2. result = max(l, key = len)

PHP

  1. $array = ['March', 'April', 'May', 'June', 'July'];
  2. $result = array_reduce($array, function($a, $b) { return strlen($a) > strlen($b) ? $a : $b; });
PHP 7.4以降
  1. $array = ['March', 'April', 'May', 'June', 'July'];
  2. $result = array_reduce($array, fn($a, $b) => strlen($a) > strlen($b) ? $a : $b);

Perl

  1. my @array = qw/March April May June July/;
  2. my ($result) = sort { length $b <=> length $a } @array; # ソート結果の配列を長さ1の配列に押し込んで、先頭以外を捨てる
  1. # use List::Util;
  2. my @array = qw/March April May June July/;
  3. my $result = List::Util::reduce { length $a > length $b ? $a : $b } @array;
  1. # use List::Util;
  2. my @array = qw/March April May June July/;
  3. my $max_length = List::Util::max(map length, @array);
  4. my $result = List::Util::first { length == $max_length } @array;

リストから最も長い文字列を全て取り出す

Java

  1. // import java.util.stream.Collectors;
  2. // import java.util.stream.Stream;
  3. Stream<String> stream = Stream.of("March", "April", "May", "June", "July");
  4. List<String> result = stream.collect(Collectors.groupingBy(s -> s.length()))
  5. .entrySet().stream()
  6. .max(Comparator.comparing(e -> e.getKey()))
  7. .get().getValue();

Groovy

  1. def list = ['March', 'April', 'May', 'June', 'July']
  2. def maxLength = list.collect { it.length() }.max()
  3. def result = list.findAll { it.length() == maxLength }
  1. def list = ['March', 'April', 'May', 'June', 'July']
  2. def maxLength = list*.length().max()
  3. def result = list.findAll { it.length() == maxLength }
  1. def list = ['March', 'April', 'May', 'June', 'July']
  2. def map = list.groupBy { it.length() }
  3. def maxLength = map.keySet().max()
  4. def result = map[maxLength]

Kotlin

Kotlin 1.4以降
  1. val list = listOf("March", "April", "May", "June", "July")
  2. val maxLength = list.maxOf { it.length }
  3. val result = list.filter { it.length == maxLength }
Kotlin 1.3まで
  1. val list = listOf("March", "April", "May", "June", "July")
  2. val maxLength = list.maxBy { it.length }!!.length
  3. val result = list.filter { it.length == maxLength }

Scala

  1. val list = List("March", "April", "May", "June", "July")
  2. val maxLength = list.map(_.length).max
  3. val result = list.filter(_.length == maxLength) // result の型は List[String]
  1. val list = List("March", "April", "May", "June", "July")
  2. val map = list.groupBy(_.length)
  3. val result = map(map.keys.max) // result の型は List[String]
  1. val list = List("March", "April", "May", "June", "July")
  2. val tupleList = for (s <- list) yield (s, s.length)
  3. val maxLength = (for ((_, length) <- tupleList) yield length).max
  4. val result = for ((s, `maxLength`) <- tupleList) yield s // result の型は List[String]
  1. val list = List("March", "April", "May", "June", "July")
  2. val tupleList = list.map(s => (s, s.length)).sortBy(_._2).reverse
  3. val (_, maxLength) :: _ = tupleList
  4. val result = tupleList.takeWhile(_._2 == maxLength).map(_._1) // result の型は List[String]

Erlang

  1. List = ["March", "April", "May", "June", "July"],
  2. TupleList = [{S, length(S)} || S <- List],
  3. MaxLength = lists:max([Length || {_, Length} <- TupleList]),
  4. Result = [S || {S, Length} <- TupleList, Length =:= MaxLength].

Haskell

  1. let list = ["March", "April", "May", "June", "July"]
  2. let result = [s | s <- list, length s == maxLength] where
  3. maxLength = maximum $ map length list
  1. -- import Control.Monad
  2. let list = ["March", "April", "May", "June", "July"]
  3. let maxLength = maximum $ map length list
  4. let result = do
  5. s <- list
  6. guard $ length s == maxLength
  7. return s
  1. let list = ["March", "April", "May", "June", "July"]
  2. let result = [s | (s, length) <- tupleList, length == maxLength] where
  3. tupleList = [(s, length s) | s <- list]
  4. maxLength = maximum [length | (_, length) <- tupleList]

PowerShell

  1. $array = 'March', 'April', 'May', 'June', 'July'
  2. $result = ($array | group Length | sort Name -Descending)[0].Group
  1. $array = 'March', 'April', 'May', 'June', 'July'
  2. $m = $array | measure Length -Maximum
  3. $result = $array | where { $_.Length -eq $m.Maximum }

F#

  1. let list = ["March"; "April"; "May"; "June"; "July"]
  2. let result = list |> Seq.groupBy String.length |> Seq.maxBy fst |> snd
  1. let list = ["March"; "April"; "May"; "June"; "July"]
  2. let maxLength = list |> List.map (fun s -> s.Length) |> List.max
  3. let result = list |> List.filter (fun s -> s.Length = maxLength)
  1. let list = ["March"; "April"; "May"; "June"; "July"]
  2. let maxLength = List.max [for s in list -> s.Length]
  3. let result = [for s in list do if s.Length = maxLength then yield s]
  1. let list = ["March"; "April"; "May"; "June"; "July"]
  2. let tupleList = [for s in list -> (s, s.Length)]
  3. let maxLength = tupleList |> List.map snd |> List.max
  4. let result = [for (s, length) in tupleList do if length = maxLength then yield s]
F# 3.0以降
  1. let list = ["March"; "April"; "May"; "June"; "July"]
  2. let result = query { for s in list do
  3. groupBy s.Length into grp
  4. sortByDescending grp.Key
  5. head }
  1. let list = ["March"; "April"; "May"; "June"; "July"]
  2. let maxLength = query { for s in list do
  3. maxBy s.Length }
  4. let result = query { for s in list do
  5. where (s.Length = maxLength) }

C#

  1. // using System.Linq;
  2. string[] array = { "March", "April", "May", "June", "July" };
  3. var result = array.GroupBy(s => s.Length).OrderByDescending(grp => grp.Key).First(); // result の型は IGrouping<int, string>
  1. // using System.Linq;
  2. string[] array = { "March", "April", "May", "June", "July" };
  3. var groups = array.GroupBy(s => s.Length);
  4. var maxLength = groups.Max(grp => grp.Key);
  5. var result = groups.First(grp => grp.Key == maxLength); // result の型は IGrouping<int, string>
  1. // using System.Linq;
  2. string[] array = { "March", "April", "May", "June", "July" };
  3. var sorted = array.OrderByDescending(s => s.Length);
  4. var maxLength = sorted.First().Length;
  5. var result = sorted.TakeWhile(s => s.Length == maxLength); // result の型は IEnumerable<int>
  1. // using System.Linq;
  2. string[] array = { "March", "April", "May", "June", "July" };
  3. var query = from s in array
  4. group s by s.Length into grp
  5. orderby grp.Key descending
  6. select grp;
  7. var result = query.First(); // result の型は IGrouping<int, string>

C++

  1. #include <vector>
  2. int get_length(const string& s) {
  3. return s.size();
  4. }
  5. struct shorter {
  6. int max_length;
  7. shorter(const vector<string>& v) {
  8. vector<int> lengths(v.size());
  9. transform(v.begin(), v.end(), lengths.begin(), get_length);
  10. max_length = *max_element(lengths.begin(), lengths.end());
  11. }
  12. bool operator()(const string& s) {
  13. return s.size() < max_length;
  14. }
  15. };
  1. const int N = 5;
  2. string array[] = {"March", "April", "May", "June", "July"};
  3. vector<string> v(array, array + N);
  4. vector<string> result(N);
  5. vector<string>::iterator result_end = remove_copy_if(v.begin(), v.end(), result.begin(), shorter(v));
  6. result.resize(result_end - result.begin());

Go

  1. array := [...]string{"March", "April", "May", "June", "July"}
  2. m := map[int][]string{}
  3. for _, s := range array {
  4. m[len(s)] = append(m[len(s)], s)
  5. }
  6. maxLength := 0
  7. for k := range m {
  8. if maxLength < k {
  9. maxLength = k
  10. }
  11. }
  12. result := m[maxLength]

Rust

itertools を使った場合
  1. // use itertools::Itertools;
  2. let array = ["March", "April", "May", "June", "July"];
  3. let groups = array.to_vec().into_iter().into_group_map_by(|s| s.chars().count());
  4. let keys: Vec<_> = groups.clone().into_keys().collect();
  5. let max_length = keys.iter().max().unwrap();
  6. let result = &groups[max_length];

Dart

  1. var list = ['March', 'April', 'May', 'June', 'July'];
  2. var map = Map<int, List<String>>();
  3. for (var s in list) {
  4. map.putIfAbsent(s.length, () => []).add(s);
  5. }
  6. var keys = List.from(map.keys);
  7. keys.sort((a, b) => b - a);
  8. var result = map[keys[0]];

TypeScript

  1. let array = ['March', 'April', 'May', 'June', 'July'];
  2. let result = array.reduce((arr, s) => {
  3. if (arr[0].length === s.length) {
  4. arr.push(s);
  5. } else if (arr[0].length < s.length) {
  6. arr = [s];
  7. }
  8. return arr;
  9. }, ['']);
Underscore を使った場合
  1. // import * as _ from 'underscore';
  2. let array = ['March', 'April', 'May', 'June', 'July'];
  3. let maxLength = _.max(array.map(s => s.length));
  4. let result = array.filter(s => s.length === maxLength);
  1. // import * as _ from 'underscore';
  2. let array = ['March', 'April', 'May', 'June', 'July'];
  3. let maxLength = _.max(array.map(s => s.length));
  4. let result = _.where(array, { length: maxLength });

JavaScript

  1. let array = ['March', 'April', 'May', 'June', 'July'];
  2. let result = array.reduce((arr, s) => {
  3. if (arr[0].length === s.length) {
  4. arr.push(s);
  5. } else if (arr[0].length < s.length) {
  6. arr = [s];
  7. }
  8. return arr;
  9. }, ['']);
Underscore を使った場合
  1. // const _ = require('underscore');
  2. let array = ['March', 'April', 'May', 'June', 'July'];
  3. let maxLength = _.max(array.map(s => s.length));
  4. let result = array.filter(s => s.length === maxLength);
  1. // const _ = require('underscore');
  2. let array = ['March', 'April', 'May', 'June', 'July'];
  3. let maxLength = _.max(array.map(s => s.length));
  4. let result = _.where(array, { length: maxLength });

CoffeeScript

  1. array = ['March', 'April', 'May', 'June', 'July']
  2. result = array.reduce (arr, s) ->
  3. if arr[0].length == s.length
  4. arr.push s
  5. else if arr[0].length < s.length
  6. arr = [s]
  7. arr
  8. , ['']
Underscore を使った場合
  1. # _ = require 'underscore'
  2. array = ['March', 'April', 'May', 'June', 'July']
  3. maxLength = _.max array.map (s) -> s.length
  4. result = array.filter (s) -> s.length == maxLength
  1. # _ = require 'underscore'
  2. array = ['March', 'April', 'May', 'June', 'July']
  3. maxLength = _.max array.map (s) -> s.length
  4. result = _.where array, { length: maxLength }

Ruby

  1. array = %w[March April May June July]
  2. hash = {}
  3. array.each {|s| (hash[s.size] ||= []) << s }
  4. result = hash[hash.keys.max]
  1. array = %w[March April May June July]
  2. hash = Hash.new {|h, key| h[key] = [] }
  3. array.each {|s| hash[s.size] << s }
  4. result = hash[hash.keys.max]
Ruby on Rails の場合
  1. array = %w[March April May June July]
  2. result = array.group_by {|s| s.size }.max_by {|grp| grp[0] }[1]

Python

  1. # import itertools
  2. l = ['March', 'April', 'May', 'June', 'July']
  3. max_length = max(map(len, l))
  4. result = [s for s in l if len(s) == max_length]
  1. # import itertools
  2. l = ['March', 'April', 'May', 'June', 'July']
  3. d = dict((key, list(values)) for key, values in itertools.groupby(l, len))
  4. result = d[max(d)]

PHP

  1. $array = ['March', 'April', 'May', 'June', 'July'];
  2. $dict = [];
  3. foreach ($array as $s) {
  4. $len = strlen($s);
  5. if (! array_key_exists($len, $dict)) {
  6. $dict[$len] = [];
  7. }
  8. array_push($dict[$len], $s);
  9. }
  10. krsort($dict);
  11. $result = current($dict);

Perl

  1. # use List::Util;
  2. my @array = qw/March April May June July/;
  3. my $max_length = List::Util::max(map length, @array);
  4. my @result = grep { length == $max_length } @array;
  1. # use List::Util;
  2. my @array = qw/March April May June July/;
  3. my $max_length = List::Util::max(map length, @array);
  4. my @result = map { length == $max_length ? $_ : () } @array; # () は空の配列
  1. # use List::Util;
  2. my @array = qw/March April May June July/;
  3. my %hash;
  4. push @{$hash{length $_}}, $_ for @array;
  5. my @result = @{$hash{List::Util::max keys %hash}};

整数のリストから偶数だけを取り出す

Java

  1. // import java.util.stream.IntStream;
  2. IntStream stream = IntStream.of(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
  3. IntStream result = stream.filter(x -> x % 2 == 0);

Groovy

  1. def list = 0..9
  2. def result = list.findAll { it % 2 == 0 }

Kotlin

  1. val range = 0..9
  2. val result = range.filter { it % 2 == 0 }

Scala

  1. val range = 0 to 9
  2. val result = range.filter(_ % 2 == 0)
  1. val range = 0 to 9
  2. val result = for (x <- range if x % 2 == 0) yield x

Erlang

  1. List = lists:seq(0, 9),
  2. Result = [X || X <- List, X rem 2 =:= 0].
  1. List = lists:seq(0, 9),
  2. Result = lists:filter(fun(X) -> X rem 2 =:= 0 end, List).

Haskell

  1. let list = [0..9]
  2. let result = [x | x <- list, x `mod` 2 == 0]
  1. let list = [0..9]
  2. let result = filter (\ x -> x `mod` 2 == 0) list

PowerShell

  1. $array = 0..9
  2. $result = $array | where { $_ % 2 -eq 0 }

F#

  1. let list = [0..9]
  2. let result = List.filter (fun x -> x % 2 = 0) list
  1. let list = [0..9]
  2. let result = list |> List.filter (fun x -> x % 2 = 0)
  1. let list = [0..9]
  2. let result = [for x in list do if x % 2 = 0 then yield x]
  1. let list = [0..9]
  2. let result = List.choose (fun x -> if x % 2 = 0 then Some x else None) list
  1. let list = [0..9]
  2. let result = List.choose (function x when x % 2 = 0 -> Some x | _ -> None) list
F# 3.0以降
  1. let list = [0..9]
  2. let result = query { for x in list do
  3. where (x % 2 = 0) }

C#

  1. // using System.Linq;
  2. var e = Enumerable.Range(0, 10);
  3. var result = e.Where(x => x % 2 == 0); // result の型は IEnumerable<int>
  1. // using System.Linq;
  2. var e = Enumerable.Range(0, 10);
  3. var result = from x in e where x % 2 == 0 select x; // result の型は IEnumerable<int>

C++

  1. bool is_odd(const int& x) {
  2. return x % 2 != 0;
  3. }
  1. const int N = 10;
  2. int array[N] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  3. int result[N];
  4. int* result_end = remove_copy_if(array, array + N, result, is_odd);
  5. // *result から *result_end までの範囲に結果が格納される
Boost を使った場合
  1. #include <algorithm>
  2. #include <boost/lambda/lambda.hpp>
  3. // using namespace boost::lambda;
  4. const int N = 10;
  5. int array[N] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  6. int result[N];
  7. int* result_end = remove_copy_if(array, array + N, result, _1 % 2 != 0);
  8. // *result から *result_end までの範囲に結果が格納される

Go

  1. array := [...]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
  2. result := []int{}
  3. for _, x := range array {
  4. if x % 2 == 0 {
  5. result = append(result, x)
  6. }
  7. }
go-funk を使った場合
  1. // import "github.com/thoas/go-funk"
  2. array := [...]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
  3. result := funk.Filter(array, func(x int) bool {
  4. return x % 2 == 0
  5. }).([]int)

Rust

  1. // use std::ops::Range;
  2. let range = Range { start: 0, end: 9 };
  3. let result: Vec<_> = range.filter(|x| x % 2 == 0).collect();

Dart

  1. var list = List.generate(10, (i) => i);
  2. var result = list.where((x) => x % 2 == 0);

TypeScript

  1. let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
  2. let result = array.filter(x => x % 2 === 0);

JavaScript

  1. let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
  2. let result = array.filter(x => x % 2 === 0);

CoffeeScript

  1. array = [0..9]
  2. result = (x for x in array when x % 2 == 0)

Ruby

  1. range = 0..9
  2. result = range.select {|x| x % 2 == 0 }
Ruby 2.6以降
  1. range = 0..9
  2. result = range.filter {|x| x % 2 == 0 }

Python

  1. l = range(0, 10) # 0から9までのリスト
  2. result = [x for x in l if x % 2 == 0]
  1. l = range(0, 10) # 0から9までのリスト
  2. result = filter(lambda x: x % 2 == 0, l)

PHP

  1. $array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
  2. $result = array_filter($array, function($x) { return $x % 2 === 0; });
PHP 7.4以降
  1. $array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
  2. $result = array_filter($array, fn($x) => $x % 2 === 0);

Perl

  1. my @array = (0..9);
  2. my @result = grep { $_ % 2 == 0 } @array;
  1. my @array = (0..9);
  2. my @result = grep !($_ % 2), @array;
  1. my @array = (0..9);
  2. my @result = map { $_ % 2 ? () : $_ } @array; # () は空の配列

整数のリストを偶数と奇数とに分ける関数

Java

  1. // import java.util.stream.Collectors;
  2. // import java.util.stream.Stream;
  3. @SuppressWarnings("unchecked")
  4. public static List<Integer>[] evensAndOdds(Stream<Integer> ints) {
  5. Map<Boolean, List<Integer>> map = ints.collect(Collectors.partitioningBy(i -> i % 2 == 0));
  6. return new List[] {map.get(true), map.get(false)};
  7. }
  1. List<Integer>[] evensAndOdds = evensAndOdds(Stream.of(0, 1, 2, 3, 4, 5, 6, 7, 8, 9));
  2. List<Integer> evens = evensAndOdds[0];
  3. List<Integer> odds = evensAndOdds[1];

Groovy

  1. def evensAndOdds(ints) {
  2. ints.split { it % 2 == 0 }
  3. }
  1. def (evens, odds) = evensAndOdds(0..9)

Kotlin

  1. fun evensAndOdds(iter: Iterable<Int>) = iter.partition { it % 2 == 0 }
  1. val (evens, odds) = evensAndOdds(0..9)

Scala

  1. def evensAndOdds(iter: Iterable[Int]) = iter.partition(_ % 2 == 0)
  1. val (evens, odds) = evensAndOdds(0 to 9)

Erlang

  1. evens_and_odds(List) -> lists:partition(fun(X) -> X rem 2 =:= 0 end, List).
  1. evens_and_odds(List) -> evens_and_odds(List, [], []).
  2. evens_and_odds([Head|Tail], Evens, Odds) ->
  3. case Head rem 2 of
  4. 0 -> evens_and_odds(Tail, [Head|Evens], Odds);
  5. 1 -> evens_and_odds(Tail, Evens, [Head|Odds])
  6. end;
  7. evens_and_odds([], Evens, Odds) -> {lists:reverse(Evens), lists:reverse(Odds)}.
  1. {Evens, Odds} = evens_and_odds([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]).

Haskell

  1. -- import List
  2. evensAndOdds = partition (\ x -> x `mod` 2 == 0)
  1. let (evens, odds) = evensAndOdds [0..9]

PowerShell

  1. function EvensAndOdds($ints) {
  2. $result = @(@(), @());
  3. $ints | foreach { $result[$_ % 2] += $_ }
  4. $result
  5. }
  1. ($evens, $odds) = EvensAndOdds @(0..9)

F#

  1. let evensAndOdds = List.partition (fun x -> x % 2 = 0)
  1. let evensAndOdds = List.partition <| fun x -> x % 2 = 0
  1. let evens, odds = evensAndOdds [0..9]
F# 4.5以降
  1. let evensAndOdds(list: int list, evens: outref<int list>, odds: outref<int list>) =
  2. let (e, o) = List.partition (fun x -> x % 2 = 0) list
  3. evens <- e
  4. odds <- o
  1. let mutable evens = []
  2. let mutable odds = []
  3. evensAndOdds([0..9], &evens, &odds)

C#

  1. // using System.Linq;
  2. public static void EvensAndOdds(IEnumerable<int> ints, out IEnumerable<int> evens, out IEnumerable<int> odds) {
  3. var lookup = ints.ToLookup(x => x % 2);
  4. evens = lookup[0];
  5. odds = lookup[1];
  6. }
  1. IEnumerable<int> evens;
  2. IEnumerable<int> odds;
  3. EvensAndOdds(Enumerable.Range(0, 10), out evens, out odds);
C# 7.0以降
  1. EvensAndOdds(Enumerable.Range(0, 10), out var evens, out var odds);
  1. // using System.Linq;
  2. public static (IEnumerable<int> evens, IEnumerable<int> odds) EvensAndOdds(IEnumerable<int> ints) {
  3. var lookup = ints.ToLookup(x => x % 2);
  4. return (lookup[0], lookup[1]);
  5. }
  1. var (evens, odds) = EvensAndOdds(Enumerable.Range(0, 10));

C++

vector 専用

  1. #include <algorithm>
  2. #include <vector>
  3. struct is_even : unary_function<int, bool> {
  4. bool operator()(const int& x) const {
  5. return x % 2 == 0;
  6. }
  7. };
  8. void evens_and_odds(vector<int>& ints, vector<int>& evens, vector<int>& odds) {
  9. vector<int>::iterator it = partition(ints.begin(), ints.end(), is_even());
  10. evens = vector<int>(ints.begin(), it);
  11. odds = vector<int>(it, ints.end());
  12. }
  1. const int N = 10;
  2. int array[N] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  3. vector<int> ints(array, array + N);
  4. vector<int> evens, odds;
  5. evens_and_odds(ints, evens, odds);

vector のほか list などにも対応

  1. #include <algorithm>
  2. #include <vector>
  3. struct is_even : unary_function<int, bool> {
  4. bool operator()(const int& x) const {
  5. return x % 2 == 0;
  6. }
  7. };
  8. template <class T, typename I>
  9. void evens_and_odds(I begin, I end, T& evens, T& odds) {
  10. I i = partition(begin, end, is_even());
  11. evens = T(begin, i);
  12. odds = T(i, end);
  13. }
  1. const int N = 10;
  2. int array[N] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  3. vector<int> ints(array, array + N);
  4. vector<int> evens, odds;
  5. evens_and_odds(ints.begin(), ints.end(), evens, odds);

Go

  1. func EvensAndOdds(ints []int) (evens []int, odds []int) {
  2. for _, x := range ints {
  3. if x % 2 == 0 {
  4. evens = append(evens, x)
  5. } else {
  6. odds = append(odds, x)
  7. }
  8. }
  9. return evens, odds
  10. }
  1. evens, odds := EvensAndOdds([]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9})

Rust

  1. fn evens_and_odds(iter: &mut dyn Iterator<Item = i32>) -> (Vec<i32>, Vec<i32>) {
  2. iter.partition(|x| x % 2 == 0)
  3. }
  1. // use std::ops::Range;
  2. let (evens, odds) = evens_and_odds(&mut Range { start: 0, end: 9 }.collect());

Dart

  1. List<List<int>> evensAndOdds(Iterable<int> iter) {
  2. List<List<int>> result = [[], []];
  3. for (var x in iter) {
  4. result[x % 2].add(x);
  5. }
  6. return result;
  7. }
  1. var list = List.generate(10, (i) => i);
  2. var result = evensAndOdds(list);
  3. var evens = result[0];
  4. var odds = result[1];

TypeScript

Underscore を使った場合
  1. // import * as _ from 'underscore';
  2. function evensAndOdds(array) {
  3. return _.partition(array, x => x % 2 === 0);
  4. }
  1. let [evens, odds] = evensAndOdds([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);

JavaScript

Underscore を使った場合
  1. // const _ = require('underscore');
  2. function evensAndOdds(array) {
  3. return _.partition(array, x => x % 2 === 0);
  4. }
  1. let [evens, odds] = evensAndOdds([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);

CoffeeScript

Underscore を使った場合
  1. # _ = require 'underscore'
  2. evensAndOdds = (array) ->
  3. _.partition array, (x) -> x % 2 == 0
  1. [evens, odds] = evensAndOdds [0..9]

Ruby

  1. def evens_and_odds array
  2. array.partition {|x| x % 2 == 0 }
  3. end
  1. evens, odds = evens_and_odds 0..9

Python

  1. # import itertools
  2. def evens_and_odds(iter):
  3. def keyfunc(x):
  4. return x % 2
  5. groups = {}
  6. for mod, values in itertools.groupby(sorted(iter, key = keyfunc), key = keyfunc):
  7. groups[mod] = list(values)
  8. return groups[0], groups[1]
  1. evens, odds = evens_and_odds(range(0, 10))

PHP

  1. function evens_and_odds($array) {
  2. $result = [[], []];
  3. foreach ($array as $n) {
  4. array_push($result[$n % 2], $n);
  5. }
  6. return $result;
  7. }
  1. list($evens, $odds) = evens_and_odds([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);

Perl

  1. sub evens_and_odds {
  2. my @result = ([], []);
  3. push @{$result[$_ % 2]}, $_ for @_;
  4. @result;
  5. }
  1. sub evens_and_odds {
  2. my @evens, @odds;
  3. for (@_) {
  4. my $ref = $_ % 2 ? \@odds : \@evens;
  5. push @$ref, $_;
  6. }
  7. \@evens, \@odds;
  8. }
  1. my ($evens, $odds) = &evens_and_odds(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
  2. # $evens、$odds はそれぞれ配列へのリファレンスになる

リストから重複した要素を取り除く

Java

  1. // import java.util.stream.IntStream;
  2. IntStream stream = IntStream.of(2, 4, 5, 2, 1, 7, 4, 0);
  3. IntStream result = stream.distinct();

Groovy

  1. def list = [2, 4, 5, 2, 1, 7, 4, 0]
  2. def result = list.unique()

Kotlin

  1. val list = listOf(2, 4, 5, 2, 1, 7, 4, 0)
  2. val result = list.distince()
  1. val list = listOf(2, 4, 5, 2, 1, 7, 4, 0)
  2. val result = list.toSet()

Scala

  1. val list = List(2, 4, 5, 2, 1, 7, 4, 0)
  2. val result = list.distinct
  1. val list = List(2, 4, 5, 2, 1, 7, 4, 0)
  2. val result = Set(list: _*)

Erlang

  1. List = [2, 4, 5, 2, 1, 7, 4, 0],
  2. Result = sets:from_list(List).

Haskell

  1. -- import List
  2. let list = [2, 4, 5, 2, 1, 7, 4, 0]
  3. let result = nub list
Cabal の MissingH を使った場合
  1. -- import Data.List.Utils
  2. let list = [2, 4, 5, 2, 1, 7, 4, 0]
  3. let result = uniq list

PowerShell

  1. $array = 2, 4, 5, 2, 1, 7, 4, 0
  2. $result = $array | sort | Get-Unique

F#

  1. let list = [2; 4; 5; 2; 1; 7; 4; 0]
  2. let result = Seq.distinct list
  1. let list = [2; 4; 5; 2; 1; 7; 4; 0]
  2. let result = set list
  1. let list = [2; 4; 5; 2; 1; 7; 4; 0]
  2. let result = Set.ofList list
F# 3.0以降
  1. let list = [2; 4; 5; 2; 1; 7; 4; 0]
  2. let result = query { for x in list do
  3. distinct }

C#

  1. // using System.Linq;
  2. int[] array = { 2, 4, 5, 2, 1, 7, 4, 0 };
  3. var result = array.Distinct(); // result の型は IEnumerable<int>

C++

  1. #include <algorithm>
  2. const int N = 10;
  3. int array[N] = {2, 4, 5, 2, 1, 7, 4, 0};
  4. int result[N];
  5. copy(array, array + N, result);
  6. sort(result, result + N);
  7. int* result_end = unique(result, result + N);
  8. // *result から *result_end までの範囲に結果が格納される

Go

  1. array := [...]int{2, 4, 5, 2, 1, 7, 4, 0}
  2. result := []int{}
  3. for _, x := range array {
  4. exists := false
  5. for _, y := range result {
  6. exists = x == y
  7. if exists { break }
  8. }
  9. if ! exists {
  10. result = append(result, x)
  11. }
  12. }
  1. // import "sort"
  2. array := [...]int{2, 4, 5, 2, 1, 7, 4, 0}
  3. newArray := array
  4. sort.Ints(newArray[:])
  5. result := []int{}
  6. for i, x := range newArray {
  7. if i == 0 || x != result[len(result) - 1] {
  8. result = append(result, x)
  9. }
  10. }
go-funk を使った場合
  1. // import "github.com/thoas/go-funk"
  2. array := [...]int{2, 4, 5, 2, 1, 7, 4, 0}
  3. result := funk.Uniq(array).([]int)

Rust

  1. // use std::collections::HashSet;
  2. let array = [2, 4, 5, 2, 1, 7, 4, 0];
  3. let result: HashSet<_> = array.iter().collect();

Dart

  1. var list = [2, 4, 5, 2, 1, 7, 4, 0];
  2. var result = Set.from(list);

TypeScript

Underscore を使った場合
  1. // import * as _ from 'underscore';
  2. let array = [2, 4, 5, 2, 1, 7, 4, 0];
  3. let result = _.uniq(array);
jQuery を使った場合
  1. let array = [2, 4, 5, 2, 1, 7, 4, 0];
  2. let result = $.unique(array);

JavaScript

Underscore を使った場合
  1. // const _ = require('underscore');
  2. let array = [2, 4, 5, 2, 1, 7, 4, 0];
  3. let result = _.uniq(array);
jQuery を使った場合
  1. let array = [2, 4, 5, 2, 1, 7, 4, 0];
  2. let result = $.unique(array);

CoffeeScript

Underscore を使った場合
  1. # _ = require 'underscore'
  2. array = [2, 4, 5, 2, 1, 7, 4, 0]
  3. result = _.uniq array
jQuery を使った場合
  1. array = [2, 4, 5, 2, 1, 7, 4, 0]
  2. result = $.unique array

Ruby

  1. array = [2, 4, 5, 2, 1, 7, 4, 0]
  2. result = array.uniq

Python

  1. list = [2, 4, 5, 2, 1, 7, 4, 0]
  2. s = set(list)

PHP

  1. $array = [2, 4, 5, 2, 1, 7, 4, 0];
  2. $result = array_unique($array);

Perl

  1. my @array = (2, 4, 5, 2, 1, 7, 4, 0);
  2. my %hash;
  3. my @result = grep { $hash{$_}++ == 0 } @array;
  1. my @array = (2, 4, 5, 2, 1, 7, 4, 0);
  2. my %hash;
  3. my @result = grep ! $hash{$_}++, @array;
CPAN の List::MoreUtils を使った場合
  1. # use List::MoreUtils;
  2. my @array = (2, 4, 5, 2, 1, 7, 4, 0);
  3. my @result = List::MoreUtils::uniq @array;
CPAN の Array::Uniq を使った場合
  1. # use Array::Uniq;
  2. my @array = (2, 4, 5, 2, 1, 7, 4, 0);
  3. my @result = uniq sort @array;

整数のリストの全要素を掛け算する

Java

  1. // import java.util.stream.IntStream;
  2. IntStream stream = IntStream.of(2, -3, 5);
  3. int result = stream.reduce(1, (left, right) -> left * right);

Groovy

  1. def list = [2, -3, 5]
  2. def result = list.inject(1) { x, y -> x * y }

Kotlin

  1. val list = listOf(2, -3, 5)
  2. val result = list.reduce { x, y -> x * y }
  1. val list = listOf(2, -3, 5)
  2. val result = list.fold(1) { x, y -> x * y }

Scala

  1. val list = List(2, -3, 5)
  2. val result = list.product
  1. val list = List(2, -3, 5)
  2. val result = list.reduceLeft(_ * _)
  1. val list = List(2, -3, 5)
  2. val result = list.foldLeft(1)(_ * _)

Erlang

  1. List = [2, -3, 5],
  2. Result = lists:foldl(fun(X, Y) -> X * Y end, 1, List).

Haskell

  1. let list = [2, -3, 5]
  2. let result = product list
  1. let list = [2, -3, 5]
  2. let result = foldl1 (*) list
  1. let list = [2, -3, 5]
  2. let result = foldl (*) 1 list

PowerShell

  1. $array = 2, -3, 5
  2. $result = 1
  3. $array | foreach { $result *= $_ }

F#

  1. let list = [2; -3; 5]
  2. let result = List.reduce (*) list
  1. let list = [2; -3; 5]
  2. let result = list |> List.reduce (*)
  1. let list = [2; -3; 5]
  2. let result = List.fold (*) 1 list
  1. let list = [2; -3; 5]
  2. let result = list |> List.fold (*) 1

C#

  1. // using System.Linq;
  2. int[] array = { 2, -3, 5 };
  3. var result = array.Aggregate((x, y) => x * y);

C++

  1. #include <numeric>
  2. const int N = 3;
  3. int array[N] = {2, -3, 5};
  4. int result = accumulate(array, array + N, 1, multiplies<int>());
Boost を使った場合
  1. #include <numeric>
  2. #include <boost/lambda/lambda.hpp>
  3. // using namespace boost::lambda;
  4. const int N = 3;
  5. int array[N] = {2, -3, 5};
  6. int result = accumulate(array, array + N, 1, _1 * _2);

Go

  1. array := [...]int{2, -3, 5}
  2. result := 1
  3. for _, x := range array {
  4. result *= x
  5. }
go-funk を使った場合
  1. // import "github.com/thoas/go-funk"
  2. array := [...]int{2, -3, 5}
  3. result := funk.Reduce(array, '*', 1).(int)

Rust

  1. let array = [2, -3, 5];
  2. let result: i32 = array.iter().product();
  1. let array = [2, -3, 5];
  2. let result = array.iter().fold(1, |acc, x| acc * x);

Dart

  1. var list = [2, -3, 5];
  2. var result = list.reduce((x, y) => x * y);

TypeScript

  1. let array = [2, -3, 5];
  2. let result = array.reduce((x, y) => x * y);

JavaScript

  1. let array = [2, -3, 5];
  2. let result = array.reduce((x, y) => x * y);

CoffeeScript

  1. array = [2, -3, 5]
  2. result = array.reduce (x, y) -> x * y

Ruby

  1. array = [2, -3, 5]
  2. result = array.inject &:*
  1. array = [2, -3, 5]
  2. result = array.inject {|x, y| x * y }
Ruby 2.7以降
  1. array = [2, -3, 5]
  2. result = array.inject { _1 * _2 }

Python

Python 3.0以降
  1. # import functools
  2. l = [2, -3, 5]
  3. result = functools.reduce(lambda x, y: x * y, l)
  1. # import functools
  2. # import operator
  3. l = [2, -3, 5]
  4. result = functools.reduce(operator.mul, l)
Python 2.xまで
  1. l = [2, -3, 5]
  2. result = reduce(lambda x, y: x * y, l)
  1. # import operator
  2. l = [2, -3, 5]
  3. result = reduce(operator.mul, l)

PHP

  1. $array = [2, -3, 5];
  2. $result = array_product($array);
  1. $array = [2, -3, 5];
  2. $result = array_reduce($array, function($x, $y) { return $x * $y; }, 1);

Perl

  1. my @array = (2, -3, 5);
  2. my $result = 1;
  3. for (@array) {
  4. $result *= $_;
  5. }
  1. my @array = (2, -3, 5);
  2. my $result = 1;
  3. $result *= $_ for @array;
  1. # use List::Util;
  2. my @array = (2, -3, 5);
  3. my $result = List::Util::reduce { $a * $b } @array;

整数のリストの各要素を桁区切りありの文字列に変換し、それらを全て連結する

例えば "1,000+2,000+3,000" のような文字列を作る。

Java

  1. // import java.text.NumberFormat;
  2. // import java.util.stream.Collectors;
  3. // import java.util.stream.IntStream;
  4. IntStream stream = IntStream.of(1000, 2000, 3000);
  5. NumberFormat nf = NumberFormat.getInstance();
  6. String s = stream.mapToObj(nf::format).collect(Collectors.joining("+"));
Guava を使った場合
  1. // import java.text.NumberFormat;
  2. // import java.util.stream.IntStream;
  3. // import com.google.common.base.Joiner;
  4. IntStream stream = IntStream.of(1000, 2000, 3000);
  5. NumberFormat nf = NumberFormat.getInstance();
  6. String s = Joiner.on('+').join(stream.mapToObj(nf::format).iterator());

Groovy

  1. // import java.text.NumberFormat
  2. def list = [1000, 2000, 3000]
  3. def s = list.collect(NumberFormat.instance.&format).join('+')
  1. def list = [1000, 2000, 3000]
  2. def s = list.collect { String.format '%,d', it }.join('+')

Kotlin

  1. val list = listOf(1000, 2000, 3000)
  2. val s = list.map { "%,d".format(it) }.joinToString("+")

Scala

  1. // import java.text.NumberFormat
  2. val list = List(1000, 2000, 3000)
  3. val s = list.map(NumberFormat.getInstance.format).mkString("+")
  1. val list = List(1000, 2000, 3000)
  2. val s = list.map("%,d".format(_)).mkString("+")

Erlang

  1. List = [1000, 2000, 3000],
  2. %% 数字が3の倍数個連続しているときに、その直前にある数字にマッチする正規表現
  3. RE = "(\\d)(?=(?:\\d{3})+(?!\\d))",
  4. Converter = fun(X) ->
  5. re:replace(io_lib:format("+~b", [X]), RE, "\\1,", [{return, list}])
  6. end,
  7. [_|S] = lists:flatten(lists:map(Converter, List)).

Haskell

  1. -- import Data.List
  2. -- 整数をカンマ区切りの文字列に変換する関数
  3. intToStr :: Integral a => a -> String
  4. intToStr n = reverse $ insertComma $ reverse $ show n
  5. where insertComma (a : b : c : d : t) | (d /= '-') = a : b : c : ',' : insertComma (d : t)
  6. insertComma t = t
  1. let list = [1000, 2000, 3000]
  2. let s = intercalate "+" $ map intToStr list
Cabal の MissingH を使った場合
  1. -- import Data.List.Utils
  2. -- 整数をカンマ区切りの文字列に変換する関数
  3. intToStr :: Integral a => a -> String
  4. intToStr n = reverse $ insertComma $ reverse $ show n
  5. where insertComma ('-' : s) = '-' : insertComma s
  6. insertComma s = join "," $ wholeMap (fixedWidth $ repeat 3) s
  1. let list = [1000, 2000, 3000]
  2. let s = join "+" $ map intToStr list

PowerShell

  1. $array = 1000, 2000, 3000
  2. $s = [string]::Join('+', ($array | foreach { $_.ToString('N0') }))
  1. $array = 1000, 2000, 3000
  2. $s = "$($array | foreach { $_.ToString('#,0') })" -replace ' ', '+'

F#

  1. let list = [1000; 2000; 3000]
  2. let s = list |> List.map (fun x -> x.ToString "N0") |> String.concat "+"
  1. let list = [1000; 2000; 3000]
  2. let s = [for x in list -> x.ToString "#,0"] |> String.concat "+"
F# 3.0以降
  1. let list = [1000; 2000; 3000]
  2. let s = String.concat "+" <| query { for x in list do
  3. select (x.ToString "#,0") }

C#

  1. // using System.Linq;
  2. int[] array = { 1000, 2000, 3000 };
  3. var s = string.Join("+", array.Select(x => x.ToString("N0")));

C++

Boost を使った場合
  1. #include <sstream>
  2. #include <vector>
  3. #include <boost/algorithm/string/join.hpp>
  4. #include <boost/regex.hpp>
  5. // 整数をカンマ区切りの文字列に変換する関数
  6. string number_format(const int n) {
  7. stringstream ss;
  8. ss << n;
  9. // 数字が3の倍数個連続しているときに、その直前にある数字にマッチする正規表現
  10. boost::regex r("(\\d)(?=(?:\\d{3})+(?!\\d))");
  11. return boost::regex_replace(ss.str(), r, "$1,", boost::format_all);
  12. }
  1. const int N = 3;
  2. int array[N] = {1000, 2000, 3000};
  3. vector<string> v(N);
  4. transform(array, array + N, v.begin(), number_format);
  5. string s = boost::algorithm::join(v, "+");

Go

  1. func IntToStr(x int) string {
  2. buf := bytes.NewBufferString("")
  3. s := strconv.Itoa(x)
  4. if s[0] == '-' {
  5. buf.WriteString("-")
  6. s = s[1:]
  7. }
  8. for i, c := range(s) {
  9. if i > 0 && (len(s) - i) % 3 == 0 {
  10. buf.WriteString(",")
  11. }
  12. buf.WriteString(string(c))
  13. }
  14. return buf.String()
  15. }
  1. array := [...]int{1000, 2000, 3000}
  2. buf := bytes.NewBufferString("")
  3. for i, x := range(array) {
  4. if i > 0 {
  5. buf.WriteString("+")
  6. }
  7. buf.WriteString(IntToStr(x))
  8. }
  9. s := buf.String()

Rust

  1. pub fn add_separator(n: &i32) -> String {
  2. format!("{}", n)
  3. .chars()
  4. .rev()
  5. .collect::<Vec<_>>()
  6. .chunks(3)
  7. .map(|cs| cs.iter().collect::<String>())
  8. .collect::<Vec<_>>()
  9. .join(",")
  10. .chars()
  11. .rev()
  12. .collect()
  13. }
  1. let array = [1000, 2000, 3000];
  2. let result = array.iter().map(|x| add_separator(x)).collect::<Vec<_>>().join("+");

Dart

  1. var list = [1000, 2000, 3000];
  2. // 数字が3の倍数個連続しているときに、その直前にある数字にマッチする正規表現
  3. var re = RegExp(r'\d(?=(?:\d{3})+(?!\d))');
  4. var s = list.map((x) => x.toString().replaceAllMapped(re, (m) => '${m[0]},')).join('+');

TypeScript

  1. let array = [1000, 2000, 3000];
  2. let s = array.map(x => x.toLocaleString()).join('+');
D3 を使った場合
  1. // import * as d3 from 'd3';
  2. let array = [1000, 2000, 3000];
  3. let s = array.map(d3.format(',')).join('+');

JavaScript

  1. let array = [1000, 2000, 3000];
  2. let s = array.map(x => x.toLocaleString()).join('+');
D3 を使った場合
  1. // const d3 = require('d3');
  2. let array = [1000, 2000, 3000];
  3. let s = array.map(d3.format(',')).join('+');

CoffeeScript

  1. array = [1000, 2000, 3000]
  2. s = (s.toLocaleString() for s in array).join '+'
D3 を使った場合
  1. # d3 = require 'd3'
  2. array = [1000, 2000, 3000]
  3. s = array.map(d3.format ',').join '+'

Ruby

  1. array = [1000, 2000, 3000]
  2. # 数字が3の倍数個連続しているときに、その直前にある数字にマッチする正規表現
  3. re = /(\d)(?=(?:\d{3})+(?!\d))/
  4. s = array.collect {|x| x.to_s.gsub(re, '\1,') }.join('+')
Ruby on Rails の場合
  1. array = [1000, 2000, 3000]
  2. s = array.collect {|x| number_with_delimiter x }.join('+')

Python

  1. # import locale
  2. # locale.setlocale(locale.LC_ALL, '')
  3. l = [1000, 2000, 3000]
  4. s = '+'.join(locale.format('%d', x, grouping = True) for x in l)
  1. # import local
  2. # locale.setlocale(locale.LC_ALL, '')
  3. l = [1000, 2000, 3000]
  4. s = '+'.join(map(lambda x: locale.format('%d', x, grouping = True), l))

PHP

  1. $array = [1000, 2000, 3000];
  2. $s = implode('+', array_map('number_format', $array));

Perl

  1. my @array = (1000, 2000, 3000);
  2. # 数字が3の倍数個連続しているときに、その直前にある数字にマッチする正規表現
  3. my $re = q/(\d)(?=(?:\d{3})+(?!\d))/;
  4. my $s = join '+', map { s/$re/$1,/g; $_ } @array;
CPAN の Number::Format を使った場合
  1. # use Number::Format;
  2. my @array = (1000, 2000, 3000);
  3. my $s = join '+', map { Number::Format::format_number $_ } @array;

月の名前のリストからXMLを生成する

例えば下記のようになる。
  1. <ul class="months">
  2. <li>March</li>
  3. <li>April</li>
  4. <li>May</li>
  5. <li>June</li>
  6. <li>July</li>
  7. </ul>

Java

  1. // import java.io.StringWriter;
  2. // import javax.xml.transform.*;
  3. // import javax.xml.transform.dom.DomSource;
  4. // import javax.xml.transform.stream.StreamResult;
  5. // import org.w3c.dom.*;
  6. String[] array = {"March", "April", "May", "June", "July"};
  7. Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
  8. Element ulElem = doc.createElement("ul");
  9. ulElem.setAttribute("class", "months");
  10. for (String s : array) {
  11. Element liElem = doc.createElement("li");
  12. liElem.appendChild(doc.createTextNode(s));
  13. ulElem.appendChild(liElem);
  14. }
  15. Transformer t = TransformerFactory.newInstance().newTransformer();
  16. t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
  17. StringWriter sw = new StringWriter();
  18. t.transform(new DOMSource(ulElem), new StreamResult(sw));
  19. String xml = sw.toString();
Thymeleaf を使った場合
  1. // import java.util.*;
  2. // import org.thymeleaf.TemplateEngine;
  3. // import org.thymeleaf.context.Context;
  4. String[] array = {"March", "April", "May", "June", "July"};
  5. String template = "<ul class='months'>"
  6. + " <li th:each='s : ${array}' th:text='${s}'></li>"
  7. + "</ul>";
  8. Context context = new Context(Locale.getDefault(), Map.of("array", array));
  9. String xml = new TemplateEngine().process(template, context);

Groovy

  1. // import groovy.xml.MarkupBuilder
  2. def list = ['March', 'April', 'May', 'June', 'July']
  3. def sw = new StringWriter()
  4. def mb = new MarkupBuilder(sw)
  5. mb.ul(class: 'months') {
  6. for (s in list) { li s }
  7. }
  8. def xml = sw as String
  1. // import groovy.xml.StreamingMarkupBuilder
  2. def list = ['March', 'April', 'May', 'June', 'July']
  3. def w = new StreamingMarkupBuilder().bind {
  4. ul(class: 'months') {
  5. for (s in list) { li s }
  6. }
  7. }
  8. def xml = w as String
  1. // import javax.xml.transform.*
  2. // import javax.xml.transform.dom.DOMSource
  3. // import javax.xml.transform.stream.StreamResult
  4. // import groovy.xml.DOMBuilder
  5. // import groovy.xml.dom.DOMCategory
  6. def list = ['March', 'April', 'May', 'June', 'July']
  7. def b = DOMBuilder.newInstance()
  8. def elem = b.ul(class: 'months') {
  9. for (s in list) { li s }
  10. }
  11. def t = TransformerFactory.newInstance().newTransformer()
  12. t.setOutputProperty OutputKeys.OMIT_XML_DECLARATION, 'yes'
  13. def sw = new StringWriter()
  14. t.transform new DOMSource(elem), new StreamResult(sw)
  15. def xml = sw as String
Thymeleaf を使った場合
  1. // import org.thymeleaf.TemplateEngine
  2. // import org.thymeleaf.context.Context
  3. def list = ['March', 'April', 'May', 'June', 'July']
  4. def template = '''
  5. <ul class="months">
  6. <li th:each="s : ${list}" th:text="${s}"></li>
  7. </ul>
  8. '''
  9. def context = new Context(Locale.default, ['list': list])
  10. def xml = new TemplateEngine().process(template, context)

Scala

  1. val list = List("March", "April", "May", "June", "July")
  2. val ulElem = <ul class="months">{ for (s <- list) yield <li>{ s }</li> }</ul> // ulElem の型は scala.xml.Elem
  3. val xml = ulElem.toString
  1. val list = List("March", "April", "May", "June", "July")
  2. val ulElem = <ul class="months">{ list.map(s => <li>{ s }</li>) }</ul> // ulElem の型は scala.xml.Elem
  3. val xml = ulElem.toString

Haskell

Cabal の xml を使った場合
  1. -- import Text.XML.Light.Output
  2. -- import Text.XML.Light.Types
  3. let list = ["March", "April", "May", "June", "July"]
  4. let q name = QName name Nothing Nothing
  5. let li s = Element (q "li") [] [Text $ CData CDataText s Nothing] Nothing
  6. let ul = Element (q "ul") [Attr (q "class") "months"] (map (Elem . li) list) Nothing
  7. let xml = showElement ul

PowerShell

  1. $array = "March", "April", "May", "June", "July"
  2. $xml = [string]::Join("", @("<ul class=""months"">"; $array | foreach { "<li>$_</li>" }; "</ul>"))
  1. $array = "March", "April", "May", "June", "July"
  2. $xml = @"
  3. <ul class="months">
  4. $($array | foreach { "<li>$_</li>" })
  5. </ul>
  6. "@

F#

  1. // open System.Xml.Linq
  2. let list = ["March"; "April"; "May"; "June"; "July"]
  3. let ulElem = new XElement(XName.Get "ul",
  4. new XAttribute(XName.Get "class", "month"),
  5. [| for s in list -> new XElement(XName.Get "li", s) |])
  6. let xml = string ulElem

C#

  1. // using System.Linq;
  2. // using System.Xml.Linq;
  3. string[] array = { "March", "April", "May", "June", "July" };
  4. var ulElem = new XElement("ul",
  5. new XAttribute("class", "months"),
  6. from s in array select new XElement("li", s));
  7. string xml = ulElem.ToString();
  1. // using System.Linq;
  2. // using System.Xml.Linq;
  3. string[] array = { "March", "April", "May", "June", "July" };
  4. var ulElem = new XElement("ul",
  5. new XAttribute("class", "months"),
  6. array.Select(s => new XElement("li", s)));
  7. string xml = ulElem.ToString();
  1. // using System.Linq;
  2. // using System.Xml;
  3. string[] array = { "March", "April", "May", "June", "July" };
  4. XmlDocument doc = new XmlDocument();
  5. XmlElement ulElem = doc.CreateElement("ul");
  6. ulElem.SetAttribute("class", "months");
  7. foreach (string s in array) {
  8. XmlElement liElem = doc.CreateElement("li");
  9. liElem.AppendChild(doc.CreateTextNode(s));
  10. ulElem.AppendChild(liElem);
  11. }
  12. string xml = ulElem.OuterXml;

TypeScript

jQuery を使った場合
  1. let months = ['March', 'April', 'May', 'June', 'July'];
  2. let ul = $('<ul class="months" />');
  3. $.each(months, (_, s) => ul.append($('<li />').text(s)));
  4. let xml = $('<x />').append(ul).html();

JavaScript

jQuery を使った場合
  1. let months = ['March', 'April', 'May', 'June', 'July'];
  2. let ul = $('<ul class="months" />');
  3. $.each(months, (_, s) => ul.append($('<li />').text(s)));
  4. let xml = $('<x />').append(ul).html();

CoffeeScript

jQuery を使った場合
  1. months = ['March', 'April', 'May', 'June', 'July']
  2. ul = $('<ul class="months" />')
  3. for s in months
  4. ul.append $('<li />').text(s)
  5. xml = $('<x />').append(ul).html()

Ruby

  1. # require 'rexml/document'
  2. array = %w[March April May June July]
  3. ul = REXML::Element.new 'ul'
  4. ul.add_attribute 'class', 'months'
  5. array.each {|s| ul.add_element('li').text = s }
  6. xml = ul.to_s
DOMなどを使わない場合
  1. array = %w[March April May June July]
  2. xml = "<ul class=\"months\">#{ array.collect {|s| "<li>#{s}</li>" } }</ul>"
  1. # require 'erb'
  2. array = %w[March April May June July]
  3. erb = <<~'END'
  4. <ul class="months">
  5. <%- for s in array -%>
  6. <li><%= s %></li>
  7. <%- end -%>
  8. </ul>
  9. END
  10. xml = ERB.new(erb, trim_mode: '-').result_with_hash(array: array)
XML Builder を使った場合
  1. # require 'builder/xmlmarkup'
  2. array = %w[March April May June July]
  3. x = Builder::XmlMarkup.new
  4. xml = x.ul(:class => :months) {
  5. array.each {|s| x.li s }
  6. }
Nokogiri を使った場合
  1. # require 'nokogiri'
  2. array = %w[March April May June July]
  3. builder = Nokogiri::XML::Builder.new {
  4. ul(:class => :months) {
  5. array.each {|s| li s }
  6. }
  7. }
  8. xml = builder.doc.root.to_xml

Python

  1. # import xml.dom
  2. l = ['March', 'April', 'May', 'June', 'July']
  3. doc = xml.dom.getDOMImplementation().createDocument(None, None, None)
  4. ulElem = doc.createElement('ul')
  5. ulElem.setAttribute('class', 'months')
  6. for s in l:
  7. liElem = doc.createElement('li')
  8. liElem.appendChild(doc.createTextNode(s))
  9. ulElem.appendChild(liElem)
  10. xml = ulElem.toxml()

PHP

  1. $array = ['March', 'April', 'May', 'June', 'July'];
  2. $ulElem = new SimpleXMLElement('<ul />');
  3. $ulElem->addAttribute('class', 'months');
  4. foreach ($array as $s) {
  5. $ulElem->addChild('li', $s);
  6. }
  7. $xml = $ulElem->asXML();
  1. $array = ['March', 'April', 'May', 'June', 'July'];
  2. $doc = new DOMDocument();
  3. $ulElem = $doc->createElement('ul');
  4. $ulElem->setAttribute('class', 'months');
  5. $doc->appendChild($ulElem);
  6. foreach ($array as $s) {
  7. $ulElem->appendChild($doc->createElement('li', $s));
  8. }
  9. $xml = $doc->saveXML($ulElem);

Perl

CPAN の XML::Generator を使った場合
  1. # use XML::Generator;
  2. my @array = qw/March April May June July/;
  3. my $x = XML::Generator->new;
  4. my $xml = $x->ul({class => 'months'}, map { $x->li($_) } @array);
CPAN の XML::DOM を使った場合
  1. # use XML::DOM;
  2. my @array = qw/March April May June July/;
  3. my $doc = XML::DOM::Document->new;
  4. my $ulElem = $doc->createElement('ul');
  5. $ulElem->setAttribute('class', 'months');
  6. $doc->appendChild($ulElem);
  7. for (@array) {
  8. my $liElem = $doc->createElement('li');
  9. $liElem->appendChild($doc->createTextNode($_));
  10. $ulElem->appendChild($liElem);
  11. }
  12. my $xml = $ulElem->toString;

フィボナッチ数列をエンドレスで生成する関数

Java

  1. // import java.util.stream.Stream;
  2. public static IntStream fibonacciNumbers() {
  3. int[] seed = {0, 1};
  4. Stream<int[]> stream = Stream.iterate(seed, arr -> new int[] {arr[1], arr[0] + arr[1]});
  5. return stream.mapToInt(arr -> arr[0]);
  6. }
  1. for (int n : (Iterable<Integer>) () -> fibonacciNumbers().iterator()) {
  2. if (n > 20) {
  3. break;
  4. }
  5. System.out.println(n);
  6. }

Groovy

  1. // import java.util.stream.Stream
  2. def fibonacciNumbers() {
  3. def seed = [0, 1]
  4. Stream.iterate(seed) { [it[1], it[0] + it[1]] }.mapToInt { it[0] }
  5. }
  1. for (n in ({ fibonacciNumbers().iterator() } as Iterable)) {
  2. if (n > 20) {
  3. break
  4. }
  5. println(n)
  6. }

Kotlin

  1. fun fibonacciNumbers() = generateSequence(Pair(0, 1)) { (x, y) -> Pair(y, x + y) }.map { (x, _) -> x }
  1. fun fibonacciNumbers() = sequence {
  2. var x = 0
  3. var y = 1
  4. while (true) {
  5. yield(x)
  6. x = y.also { y += x }
  7. }
  8. }
  1. fibonacciNumbers().takeWhile { it <= 20 }.forEach(::println)

Scala

  1. def fibonacciNumbers = {
  2. def f(i: Int, j: Int): Stream[Int] = i #:: f(j, i + j)
  3. f(0, 1)
  4. }
  1. def fibonacciNumbers = Stream.iterate((0, 1)) { case (i, j) => (j, i + j) }.map { case (i, j) => i }
  1. fibonacciNumbers.takeWhile(n => n <= 20).foreach(println)

Erlang

  1. %% Func は、数列の値を引数に取り、繰り返しを続けるかどうかを true/false で返す関数
  2. fibonacci_numbers(Func) -> fibonacci_numbers(0, 1, Func).
  3. fibonacci_numbers(I, J, Func) -> Func(I) andalso fibonacci_numbers(J, I + J, Func).
  1. fibonacci_numbers(fun(N) ->
  2. if
  3. N > 20 -> false; %% 20を超えたら終了
  4. true -> io:format("~p~n", [N]), true %% それ以外なら出力を行って次へ
  5. end
  6. end).
  1. fibonacci_numbers(fun(N) -> N =< 20 andalso io:format("~p~n", [N]) =:= ok end).

Haskell

  1. fibonacciNumbers = 0 : 1 : zipWith (+) fibonacciNumbers (tail fibonacciNumbers)
  1. fibonacciNumbers @(_ : t) = 0 : 1 : zipWith (+) fibonacciNumbers t
  1. -- import List
  2. fibonacciNumbers = unfoldr (\ (i, j) -> Just (i, (j, i + j))) (0, 1)
  1. mapM_ print $ takeWhile (<= 20) fibonacciNumbers

F#

  1. let fibonacciNumbers() =
  2. let f (i, j) = Some(i, (j, i + j))
  3. Seq.unfold f (0, 1)
  1. let fibonacciNumbers() =
  2. let rec f i j = seq {
  3. yield i
  4. yield! f j (i + j)
  5. }
  6. f 0 1
  1. let fibonacciNumbers() = seq {
  2. let state = ref (0, 1)
  3. while true do
  4. let (i, j) = !state
  5. yield i
  6. state := (j, i + j)
  7. }
  1. fibonacciNumbers() |> Seq.takeWhile (fun n -> n <= 20) |> Seq.iter (printfn "%d")
  1. fibonacciNumbers() |> Seq.takeWhile ((>=) 20) |> Seq.iter (printfn "%d")
F# 3.0以降
  1. Seq.iter (printfn "%d") <| query { for n in fibonacciNumbers() do
  2. takeWhile (n <= 20) }

C#

  1. public static IEnumerable<int> FibonacciNumbers() {
  2. int i = 0;
  3. int j = 1;
  4. for (;;) {
  5. yield return i;
  6. int tmp = i;
  7. i = j;
  8. j += tmp;
  9. }
  10. }
  1. IEnumerable<int> numbers = FibonacciNumbers();
  2. foreach (int n in numbers) {
  3. if (n > 20) {
  4. break;
  5. }
  6. Console.WriteLine(n);
  7. }

Go

  1. func fibonacciNumbers() <-chan int {
  2. ch := make(chan int)
  3. go func() {
  4. i, j := 0, 1
  5. for {
  6. ch <- i
  7. i, j = j, i + j
  8. }
  9. } ()
  10. return ch
  11. }
  1. numbers := fibonacciNumbers()
  2. for {
  3. n := <- numbers
  4. if n > 20 { break }
  5. fmt.Printf("%d\n", n)
  6. }

Rust

  1. pub fn fibonacci_numbers() -> impl Iterator<Item = u32> {
  2. struct Fibonacci(u32, u32);
  3. impl Iterator for Fibonacci {
  4. type Item = u32;
  5. fn next(&mut self) -> Option<Self::Item> {
  6. let result = self.0;
  7. self.0 = self.1;
  8. self.1 = result + self.1;
  9. Some(result)
  10. }
  11. }
  12. Fibonacci(0, 1)
  13. }
  1. for n in fibonacci_numbers().take_while(|&n| n <= 20) {
  2. println!("{}", n);
  3. }

Dart

  1. class FibonacciIterator implements Iterator<int> {
  2. var _list = [0, 0, 1];
  3. get current => _list[0];
  4. moveNext() {
  5. _list = [_list[1], _list[2], _list[1] + _list[2]];
  6. return true;
  7. }
  8. }
  9. class FibonacciIterable with Iterable<int> {
  10. get iterator => FibonacciIterator();
  11. }
  1. var numbers = FibonacciIterable();
  2. for (var n in numbers) {
  3. if (n > 20) break;
  4. print(n);
  5. }

TypeScript

  1. function fibonacciNumbers() {
  2. let [i, j] = [0, 1];
  3. return () => {
  4. let tmp = i;
  5. i = j;
  6. j += tmp;
  7. return tmp;
  8. };
  9. }
  1. let numbers = fibonacciNumbers();
  2. for (let n: number; (n = numbers()) <= 20; ) {
  3. console.log(n);
  4. }
  1. function* fibonacciNumbers() {
  2. let [i, j] = [0, 1];
  3. for (;;) {
  4. yield i;
  5. [i, j] = [j, i + j];
  6. }
  7. }
  1. for (let n of fibonacciNumbers()) {
  2. if (n > 20) break;
  3. console.log(n);
  4. }

JavaScript

  1. function fibonacciNumbers() {
  2. let [i, j] = [0, 1];
  3. return () => {
  4. let tmp = i;
  5. i = j;
  6. j += tmp;
  7. return tmp;
  8. };
  9. }
  1. let numbers = fibonacciNumbers();
  2. for (let n; (n = numbers()) <= 20; ) {
  3. console.log(n);
  4. }
  1. function* fibonacciNumbers() {
  2. let [i, j] = [0, 1];
  3. for (;;) {
  4. yield i;
  5. [i, j] = [j, i + j];
  6. }
  7. }
  1. for (let n of fibonacciNumbers()) {
  2. if (n > 20) break;
  3. console.log(n);
  4. }

CoffeeScript

  1. fibonacciNumbers = ->
  2. [i, j] = [0, 1]
  3. -> ([_, i, j] = [i, j, i + j])[0]
  1. numbers = fibonacciNumbers()
  2. while (n = numbers()) <= 20
  3. console.log n
  1. fibonacciNumbers = ->
  2. [i, j] = [0, 1]
  3. loop
  4. yield i
  5. [i, j] = [j, i + j]
  6. return
  1. for n from fibonacciNumbers()
  2. break if n > 20
  3. console.log n

Ruby

  1. class FibonacciNumbers
  2. include Enumerable
  3. def each
  4. i, j = 0, 1
  5. loop do
  6. yield i
  7. i, j = j, i + j
  8. end
  9. end
  10. end
  1. FibonacciNumbers.new.take_while {|n| n <= 20 }.each {|n| puts n }
  1. def fibonacci_numbers
  2. Enumerator.new do |y|
  3. i, j = 0, 1
  4. loop do
  5. y << i
  6. i, j = j, i + j
  7. end
  8. end
  9. end
  1. fibonacci_numbers.take_while {|n| n <= 20 }.each {|n| puts n }
  1. # require 'fiber'
  2. def fibonacci_numbers
  3. Fiber.new do
  4. i, j = 0, 1
  5. loop do
  6. Fiber.yield i
  7. i, j = j, i + j
  8. end
  9. end
  10. end
  1. numbers = fibonacci_numbers
  2. while (n = numbers.resume) <= 20
  3. puts n
  4. end
Ruby 2.7以降
  1. def fibonacci_numbers
  2. Enumerator.produce([0, 1]) {|i, j| [j, i + j] }.lazy.collect(&:first)
  3. end
  1. fibonacci_numbers.take_while {|n| n <= 20 }.eager.each {|n| puts n }

Python

  1. def fibonacci_numbers():
  2. (i, j) = (0, 1)
  3. while True:
  4. yield i
  5. (i, j) = (j, i + j)
  1. for n in fibonacci_numbers():
  2. if n > 20:
  3. break
  4. print(n)

PHP

  1. function fibonacci() {
  2. $arr = [0, 1];
  3. for (;;) {
  4. yield $arr[0];
  5. $arr = [$arr[1], $arr[0] + $arr[1]];
  6. }
  7. }
  1. foreach (fibonacci() as $n) {
  2. if ($n > 20) break;
  3. echo $n, "\n";
  4. }

Perl

  1. sub fibonacci_numbers {
  2. my ($i, $j) = (0, 1);
  3. return sub {
  4. my $tmp = $i;
  5. $i = $j;
  6. $j += $tmp;
  7. return $tmp;
  8. };
  9. }
  1. my $numbers = fibonacci_numbers();
  2. while (($_ = $numbers->()) <= 20) {
  3. print "$_\n";
  4. }

国のリストと都市のリストを結合し、日本以外の都市をコード順に出力する

Scala

  1. case class Country(code: String, name: String)
  2. case class City(countryCode: String, code: String, name: String)
  3. val countries = List(
  4. Country("JP", "日本"),
  5. Country("US", "アメリカ"),
  6. Country("GB", "イギリス")
  7. )
  8. val cities = List(
  9. City("JP", "TYO", "東京"),
  10. City("US", "WAS", "ワシントンD.C."),
  11. City("US", "NYC", "ニューヨーク"),
  12. City("GB", "LON", "ロンドン"),
  13. City("GB", "BHX", "バーミンガム")
  14. )
  1. val result = for (ci <- cities; co @ Country(ci.countryCode, _) <- countries if co.name != "日本")
  2. yield Map("countryCode" -> co.code, "countryName" -> co.name, "cityCode" -> ci.code, "cityName" -> ci.name)
  3. result.sort(_("cityCode") < _("cityCode")).foreach(m =>
  4. println("%s:%s %s:%s".format(m("countryCode"), m("countryName"), m("cityCode"), m("cityName"))))

Erlang

  1. -record(country, {code, name}).
  2. -record(city, {country_code, code, name}).
  1. Countries = [
  2. #country{code = "JP", name = "日本"},
  3. #country{code = "US", name = "アメリカ"},
  4. #country{code = "GB", name = "イギリス"}
  5. ],
  6. Cities = [
  7. #city{country_code = "JP", code = "TYO", name = "東京"},
  8. #city{country_code = "US", code = "WAS", name = "ワシントンD.C."},
  9. #city{country_code = "US", code = "NYC", name = "ニューヨーク"},
  10. #city{country_code = "GB", code = "LON", name = "ロンドン"},
  11. #city{country_code = "GB", code = "BHX", name = "バーミンガム"}
  12. ],
  1. List = [[Co#country.code, Co#country.name, Ci#city.code, Ci#city.name] || Ci <- Cities,
  2. Co <- Countries,
  3. Ci#city.country_code =:= Co#country.code,
  4. Co#country.name =/= "日本"],
  5. Result = lists:sort(fun([_, _, CityCode1, _], [_, _, CityCode2, _]) -> CityCode1 =< CityCode2 end, List),
  6. [io:format("~s:~s ~s:~s~n", R) || R <- Result].

Haskell

  1. data Country = Country String String
  2. data City = City String String String
  1. let countries = [Country "JP" "日本",
  2. Country "US" "アメリカ",
  3. Country "GB" "イギリス"
  4. ]
  5. let cities = [City "JP" "TYO" "東京",
  6. City "US" "WAS" "ワシントンD.C.",
  7. City "US" "NYC" "ニューヨーク",
  8. City "GB" "LON" "ロンドン",
  9. City "GB" "BHX" "バーミンガム"
  10. ]
  11. let result = [(countryCode, countryName, cityCode, cityName)
  12. |(City countryCode cityCode cityName) <- cities,
  13. (Country countryCode' countryName) <- countries,
  14. countryCode == countryCode',
  15. countryName /= "日本"
  16. ]
  17. mapM_ (putStrLn . f) result
  18. where f (countryCode, countryName, cityCode, cityName) =
  19. countryCode ++ ":" ++ countryName ++ " " ++ cityCode ++ ":" ++ cityName

F#

  1. type Country = { Code : string; Name : string }
  2. type City = { CountryCode : string; Code : string; Name : string }
  3. let countries = [
  4. { Country.Code = "JP"; Name = "日本" };
  5. { Country.Code = "US"; Name = "アメリカ" };
  6. { Country.Code = "GB"; Name = "イギリス" }
  7. ]
  8. let cities = [
  9. { CountryCode = "JP"; Code = "TYO"; Name = "東京" };
  10. { CountryCode = "US"; Code = "WAS"; Name = "ワシントンD.C." };
  11. { CountryCode = "US"; Code = "NYC"; Name = "ニューヨーク" };
  12. { CountryCode = "GB"; Code = "LON"; Name = "ロンドン" };
  13. { CountryCode = "GB"; Code = "BHX"; Name = "バーミンガム" }
  14. ]
  1. let result = seq {
  2. for ci in cities do
  3. for co in countries do
  4. if ci.CountryCode = co.Code && co.Name <> "日本" then
  5. yield Map.ofList [("countryCode", co.Code); ("countryName", co.Name); ("cityCode", ci.Code); ("cityName", ci.Name)]
  6. }
  7. result |> Seq.sortBy (fun m -> m.["cityCode"])
  8. |> Seq.iter (fun m -> printfn "%s:%s %s:%s" m.["countryCode"] m.["countryName"] m.["cityCode"] m.["cityName"])
F# 3.0以降
  1. let result = query {
  2. for ci in cities do
  3. join co in countries on (ci.CountryCode = co.Code)
  4. where (co.Name <> "日本")
  5. select (Map.ofList [("countryCode", co.Code); ("countryName", co.Name); ("cityCode", ci.Code); ("cityName", ci.Name)])
  6. }
  7. query { for m in result do
  8. sortBy m.["cityCode"]
  9. select (printfn "%s:%s %s:%s" m.["countryCode"] m.["countryName"] m.["cityCode"] m.["cityName"])
  10. } |> Seq.iter ignore

C#

  1. // using System.Linq;
  2. var countries = new[] {
  3. new {Code = "JP", Name = "日本"},
  4. new {Code = "US", Name = "アメリカ"},
  5. new {Code = "GB", Name = "イギリス"},
  6. };
  7. var cities = new[] {
  8. new {CountryCode = "JP", Code = "TYO", Name = "東京"},
  9. new {CountryCode = "US", Code = "WAS", Name = "ワシントンD.C."},
  10. new {CountryCode = "US", Code = "NYC", Name = "ニューヨーク"},
  11. new {CountryCode = "GB", Code = "LON", Name = "ロンドン"},
  12. new {CountryCode = "GB", Code = "BHX", Name = "バーミンガム"},
  13. };
  1. var query = from ci in cities
  2. join co in countries on ci.CountryCode equals co.Code
  3. where co.Name != "日本"
  4. orderby ci.Code
  5. select new {CountryCode = co.Code, CountryName = co.Name, CityCode = ci.Code, CityName = ci.Name};
  6. foreach (var r in query) {
  7. Console.WriteLine($"{r.CountryCode}:{r.CountryName} {r.CityCode}:{r.CityName}");
  8. }

Ruby

リスト同士の結合を行う方法は用意されていないが、ハッシュを使って実現した例を示す。
  1. class Country
  2. attr_reader :code, :name
  3. def initialize(code, name)
  4. @code = code
  5. @name = name
  6. end
  7. end
  8. class City
  9. attr_reader :country_code, :code, :name
  10. def initialize(country_code, code, name)
  11. @country_code = country_code
  12. @code = code
  13. @name = name
  14. end
  15. end
  16. countries = [
  17. Country.new('JP', '日本'),
  18. Country.new('US', 'アメリカ'),
  19. Country.new('GB', 'イギリス'),
  20. ]
  21. cities = [
  22. City.new('JP', 'TYO', '東京'),
  23. City.new('US', 'WAS', 'ワシントンD.C.'),
  24. City.new('US', 'NYC', 'ニューヨーク'),
  25. City.new('GB', 'LON', 'ロンドン'),
  26. City.new('GB', 'BHX', 'バーミンガム'),
  27. ]
  1. hash = Hash[*countries.collect {|co| [co.code, co] }.flatten]
  2. array = cities.collect do |ci|
  3. {:ci => ci, :co => hash[ci.country_code]}
  4. end
  5. array = array.select {|r| r[:co].name != '日本' }.sort_by {|r| r[:ci].code }
  6. array.collect! do |r|
  7. {:country_code => r[:co].code, :country_name => r[:co].name, :city_code => r[:ci].code, :city_name => r[:ci].name}
  8. end
  9. puts array.collect do |r|
  10. "#{r[:country_code]}:#{r[:country_name]} #{r[:city_code]}:#{r[:city_name]}"
  11. end

Python

  1. class Country:
  2. def __init__(self, code, name):
  3. self.code = code
  4. self.name = name
  5. class City:
  6. def __init__(self, country_code, code, name):
  7. self.country_code = country_code
  8. self.code = code
  9. self.name = name
  10. countries = [
  11. Country('JP', '日本'),
  12. Country('US', 'アメリカ'),
  13. Country('GB', 'イギリス'),
  14. ]
  15. cities = [
  16. City('JP', 'TYO', '東京'),
  17. City('US', 'WAS', 'ワシントンD.C.'),
  18. City('US', 'NYC', 'ニューヨーク'),
  19. City('GB', 'LON', 'ロンドン'),
  20. City('GB', 'BHX', 'バーミンガム'),
  21. ]
  1. result = [
  2. {'country_code': co.code, 'country_name': co.name, 'city_code': ci.code, 'city_name': ci.name}
  3. for ci in cities
  4. for co in countries if ci.country_code == co.code and co.name != '日本'
  5. ]
  6. result.sort(key = lambda r: r['city_code'])
  7. for r in result:
  8. print('%s:%s %s:%s' % (r['country_code'], r['country_name'], r['city_code'], r['city_name']))

ポーカーの手を判定する関数

簡略化のため、ジョーカーはないものとして扱う。

Groovy

  1. enum Suit { CLUB, DIAMOND, HEART, SPADE }
  2. // リストの要素が連番になっているかどうか判定するクラス
  3. class IsSequential {
  4. def isCase(list) { // switch 文で使えるようにするためのメソッド
  5. def prev = list[0]
  6. for (i in 1 .. list.size - 1) {
  7. if (prev + 1 != list[i]) return false
  8. prev = list[i]
  9. }
  10. return true
  11. }
  12. }
  13. def isSequential() {
  14. new IsSequential()
  15. }
  16. // リストの先頭の要素から順に値を検査するクラス
  17. class HasPrefix {
  18. private prefix
  19. HasPrefix(prefix) { // コンストラクタ
  20. this.prefix = prefix
  21. }
  22. def isCase(list) { // switch 文で使えるようにするためのメソッド
  23. for (i in 0 .. prefix.length - 1) {
  24. if (i >= list.size || list[i] != prefix[i]) return false
  25. }
  26. return true
  27. }
  28. }
  29. def hasPrefix(...prefix) {
  30. new HasPrefix(prefix)
  31. }
  1. // ポーカーの手を判定する関数
  2. def checkPokerHand(cards) {
  3. def suitCount = cards.collect { it[0] }.unique().size
  4. def numbers = cards.collect { it[1] }.sort()
  5. if (suitCount == 1) { // スートが揃っている場合
  6. switch (numbers) {
  7. case isSequential(): return 'Straight Flash'
  8. case [1, 10, 11, 12, 13]: return 'Royal Straight Flash'
  9. default: return 'Flash'
  10. }
  11. } else { // スートが揃っていない場合
  12. switch (numbers) {
  13. case isSequential(): return 'Straight'
  14. default:
  15. def counts = numbers.groupBy { it }.values()*.size.sort().reverse()
  16. switch (counts) { // 数が同じカードの枚数で判定する
  17. case hasPrefix(4 ): return 'Four of a Kind'
  18. case hasPrefix(3, 2): return 'Full House'
  19. case hasPrefix(3 ): return 'Three of a Kind'
  20. case hasPrefix(2, 2): return 'Two Pair'
  21. case hasPrefix(2 ): return 'One Pair'
  22. default: return 'No Pair'
  23. }
  24. }
  25. }
  26. }
  1. def result = checkPokerHand([[Suit.CLUB, 8], [Suit.HEART, 8], [Suit.DIAMOND, 8], [Suit.SPADE, 4], [Suit.CLUB, 4]])

Scala

  1. // リストの要素が連番になっているか判定するオブジェクト
  2. case object Sequential {
  3. def apply(numbers: List[Int]): Boolean =
  4. numbers.sliding(2).forall { case Seq(n0, n1) => n0 + 1 == n1 }
  5. def unapply(numbers: List[Int]) = apply(numbers)
  6. }
  1. // ポーカーの手を判定する関数
  2. def checkPokerHand[Suit](cards: List[(Suit, Int)]) = {
  3. val suitCount = cards.map(_._1).distinct.length
  4. val numbers = cards.map(_._2).sorted
  5. if (suitCount == 1) { // スートが揃っている場合
  6. numbers match {
  7. case Sequential() => "Straight Flash"
  8. case List(1, 10, 11, 12, 13) => "Royal Straight Flash"
  9. case _ => "Flash"
  10. }
  11. } else { // スートが揃っていない場合
  12. numbers match {
  13. case Sequential() => "Straight"
  14. case _ =>
  15. val counts = numbers.groupBy(identity).values.map(_.length).toList.sortWith(_ > _)
  16. counts match { // 数が同じカードの枚数で判定する
  17. case 4 :: _ => "Four of a Kind"
  18. case 3 :: 2 :: _ => "Full House"
  19. case 3 :: _ => "Three of a Kind"
  20. case 2 :: 2 :: _ => "Two Pair"
  21. case 2 :: _ => "One Pair"
  22. case _ => "No Pair"
  23. }
  24. }
  25. }
  26. }
  1. val result = checkPokerHand(List(('club, 8), ('heart, 8), ('diamond, 8), ('spade, 4), ('club, 4)))

Erlang

  1. %% リストの要素を値別に数える関数
  2. count_elements(List) ->
  3. Fun = fun(Elem, Dict) -> dict:update_counter(Elem, 1, Dict) end,
  4. lists:foldl(Fun, dict:new(), List).
  5. %% リストの要素が連番になっているかどうか判定する関数
  6. is_sequential([N0, N1|T]) -> (N0 + 1 =:= N1) and is_sequential([N1|T]);
  7. is_sequential(_) -> true.
  1. %% ポーカーの手を判定する関数
  2. check_poker_hand(Cards) ->
  3. Numbers = lists:sort(lists:map(fun({_, N}) -> N end, Cards)),
  4. Sequential = is_sequential(Numbers), %% if文の条件式のところに直接は書けないので、一旦変数に入れる
  5. case Cards of
  6. [{S, _}, {S, _}, {S, _}, {S, _}, {S, _}] -> %% スートが揃っている場合
  7. if
  8. Sequential -> "Straight Flash";
  9. Numbers =:= [1, 10, 11, 12, 13] -> "Royal Straight Flash";
  10. true -> "Flash"
  11. end;
  12. [{_, _}, {_, _}, {_, _}, {_, _}, {_, _}] -> %% スートが揃っていない場合
  13. if
  14. Sequential -> "Straight";
  15. true ->
  16. CountList = [Count || {_, Count} <- dict:to_list(count_elements(Numbers))],
  17. case lists:reverse(lists:sort(CountList)) of %% 数が同じカードの枚数で判定する
  18. [4|_] -> "Four of a Kind";
  19. [3, 2|_] -> "Full House";
  20. [3|_] -> "Three of a Kind";
  21. [2, 2|_] -> "Two Pair";
  22. [2|_] -> "One Pair";
  23. _ -> "No Pair"
  24. end
  25. end
  26. end.
  1. Result = check_poker_hand([{club, 8}, {heart, 8}, {diamond, 8}, {spade, 4}, {club, 4}]).

Haskell

GHC 6.10.1以降でビューパターンを使う
  1. -- import List
  2. data Suit = Club | Diamond | Heart | Spade deriving (Eq, Ord)
  3. -- リストの要素が連番になっているかどうかを判定する関数
  4. isSequential (n0 : n1 : t) = (n0 + 1 == n1) && isSequential (n1 : t)
  5. isSequential _ = True
  1. -- ポーカーの手を判定する関数
  2. checkPokerHand cards =
  3. case suitCount of
  4. 1 -> case numbers of -- スートが揃っている場合
  5. (isSequential -> True) -> "Straight Flash"
  6. [1, 10, 11, 12, 13] -> "Royal Straight Flash"
  7. otherwise -> "Flash"
  8. _ -> case numbers of -- スートが揃っていない場合
  9. (isSequential -> True) -> "Straight"
  10. otherwise -> case counts of -- 数が同じカードの枚数で判定する
  11. 4 : _ -> "Four of a Kind"
  12. 3 : 2 : _ -> "Full House"
  13. 3 : _ -> "Three of a Kind"
  14. 2 : 2 : _ -> "Two Pair"
  15. 2 : _ -> "One Pair"
  16. _ -> "No Pair"
  17. where suitCount = length $ nub $ map fst cards
  18. numbers = sort $ map snd cards
  19. counts = reverse $ sort $ map length $ group numbers
  1. let result = checkPokerHand [(Club, 8), (Heart, 8), (Diamond, 8), (Spade, 4), (Club, 4)]

F#

  1. type Suit = Club | Diamond | Heart | Spade
  2. // リストの要素が連番になっているかどうか判定する関数
  3. let isSequential = Seq.pairwise >> Seq.forall (fun (a, b) -> a + 1 = b)
  4. // アクティブなパターン(match 文で使う)
  5. let (|Sequential|_|) numbers = if isSequential numbers then Some() else None
  1. // ポーカーの手を判定する関数
  2. let checkPokerHand cards =
  3. let suitCount = cards |> Seq.map fst |> Seq.distinct |> Seq.length
  4. let numbers = cards |> Seq.map snd |> Seq.toList |> List.sort
  5. if suitCount = 1 then // スートが揃っている場合
  6. match numbers with
  7. | Sequential -> "Straight Flash"
  8. | [1; 10; 11; 12; 13] -> "Royal Straight Flash"
  9. | _ -> "Flash"
  10. else // スートが揃っていない場合
  11. match numbers with
  12. | Sequential -> "Straight"
  13. | _ -> let counts = numbers |> Seq.groupBy id |> Seq.map (snd >> Seq.length) |> Seq.toList |> List.sort |> List.rev
  14. match counts with // 数が同じカードの枚数で判定する
  15. | 4 :: _ -> "Four of a Kind"
  16. | 3 :: 2 :: _ -> "Full House"
  17. | 3 :: _ -> "Three of a Kind"
  18. | 2 :: 2 :: _ -> "Two Pair"
  19. | 2 :: _ -> "One Pair"
  20. | _ -> "No Pair"
  1. let result = checkPokerHand [(Club, 8); (Heart, 8); (Diamond, 8); (Spade, 4); (Club, 4)]

C#

C# 8.0以降
  1. // using System.Linq;
  2. public enum Suit { Club, Diamond, Heart, Spade }
  3. public struct Card {
  4. public Suit Suit { get; set; }
  5. public int Number { get; set; }
  6. }
  7. // リストの要素が連番になっているかどうか判定するメソッド
  8. public static bool IsSequential(this IEnumerable<int> e) {
  9. var result = true;
  10. e.Skip(1).Aggregate(e.First(), (prevNum, num) => {
  11. result &= (prevNum + 1 == num);
  12. return num;
  13. });
  14. return result;
  15. }
  16. // 先頭の2要素をパターンマッチングで使えるようにするためのメソッド
  17. public static void Deconstruct<T>(this IEnumerable<T> e, out T t0, out T t1) {
  18. T[] array = e.ToArray();
  19. t0 = array[0];
  20. t1 = array[1];
  21. }
  1. // ポーカーの手を判定するメソッド
  2. public static string CheckPokerHand(IEnumerable<Card> cards) {
  3. var suitCount = cards.Select(c => c.Suit).Distinct().Count();
  4. var numbers = cards.Select(c => c.Number).OrderBy(n => n);
  5. if (suitCount == 1) { // スートが揃っている場合
  6. if (numbers.IsSequential()) return "Straight Flash";
  7. if (numbers.ToArray() == new int[] { 1, 10, 11, 12, 13 }) return "Royal Straight Flash";
  8. return "Flash";
  9. } else { // スートが揃っていない場合
  10. if (numbers.IsSequential()) return "Straight";
  11. var counts = numbers.GroupBy(n => n).Select(grp => grp.Count()).OrderByDescending(n => n);
  12. return counts switch { // 数が同じカードの枚数で判定する
  13. (4, _) => "Four of a Kind",
  14. (3, 2) => "Full House",
  15. (3, _) => "Three of a Kind",
  16. (2, 2) => "Two Pair",
  17. (2, _) => "One Pair",
  18. _ => "No Pair"
  19. };
  20. }
  21. }
  1. var result = CheckPokerHand(new Card[] {
  2. new Card { Suit = Suit.Club, Number = 8 },
  3. new Card { Suit = Suit.Heart, Number = 8 },
  4. new Card { Suit = Suit.Diamond, Number = 8 },
  5. new Card { Suit = Suit.Spade, Number = 4 },
  6. new Card { Suit = Suit.Club, Number = 4 }
  7. });

Ruby

  1. # 配列の要素が連番になっているかどうか判定する関数
  2. def sequential?
  3. -> (array) {
  4. result = true
  5. array.inject {|prev_num, num|
  6. result &= (prev_num + 1 == num)
  7. num
  8. }
  9. result
  10. }
  11. end
  12. # 配列の先頭の要素から順に値を検査する関数
  13. def prefix? *prefix
  14. -> (array) { array.first(prefix.length) == prefix }
  15. end
  1. # ポーカーの手を判定する関数
  2. def check_poker_hand cards
  3. suit_count = cards.collect {|c| c[0] }.uniq.length
  4. numbers = cards.collect {|c| c[1] }.sort
  5. if suit_count == 1 # スートが揃っている場合
  6. case numbers
  7. when sequential? ; 'Straight Flash'
  8. when [1, 10, 11, 12, 13] ; 'Royal Straight Flash'
  9. else ; 'Flash'
  10. end
  11. else # スートが揃っていない場合
  12. case numbers
  13. when sequential? ; 'Straight'
  14. else
  15. counts = numbers.group_by(&:to_i).values.collect(&:count).sort.reverse
  16. case counts # 数が同じカードの枚数で判定する
  17. when prefix?(4) ; 'Four of a Kind'
  18. when prefix?(3, 2) ; 'Full House'
  19. when prefix?(3) ; 'Three of a Kind'
  20. when prefix?(2, 2) ; 'Two Pair'
  21. when prefix?(2) ; 'One Pair'
  22. else ; 'No Pair'
  23. end
  24. end
  25. end
  26. end
  1. result = check_poker_hand [[:club, 8], [:heart, 8], [:diamond, 8], [:spade, 4], [:club, 4]]

Python

  1. # import itertools
  2. def pairwise(iterable):
  3. a, b = itertools.tee(iterable)
  4. next(b)
  5. return zip(a, b)
  6. # リストの要素が連番になっているかどうか判定する関数
  7. def is_sequential(iterable):
  8. for a, b in pairwise(iterable):
  9. if a + 1 != b:
  10. return False
  11. return True
  12. # リストの先頭の要素から順に値を検査する関数
  13. def has_prefix(iterable, *prefix):
  14. for a, b in zip(itertools.islice(iterable, 0, len(prefix)), prefix):
  15. if a != b:
  16. return False
  17. return True
  1. # ポーカーの手を判定する関数
  2. def check_poker_hand(cards):
  3. suit_count = len(set(c[0] for c in cards))
  4. numbers = sorted(c[1] for c in cards)
  5. if suit_count == 1:
  6. return ('Straight Flash' if is_sequential(numbers)
  7. else 'Royal Straight Flash' if numbers == [1, 10, 11, 12, 13]
  8. else 'Flash')
  9. else:
  10. if is_sequential(numbers):
  11. return 'Straight'
  12. counts = sorted([len(list(g)) for _, g in itertools.groupby(numbers)], reverse = True)
  13. return ('Four of a Kind' if has_prefix(counts, 4)
  14. else 'Full House' if has_prefix(counts, 3, 2)
  15. else 'Three of a Kind' if has_prefix(counts, 3)
  16. else 'Two Pair' if has_prefix(counts, 2, 2)
  17. else 'One Pair' if has_prefix(counts, 2)
  18. else 'No Pair')
  1. result = check_poker_hand([('club', 8), ('heart', 8), ('diamond', 8), ('spade', 4), ('club', 4)])

戻る

目次

2つのリストを結合した新しいリストを作る Java Groovy Kotlin Scala Erlang Haskell PowerShell F# C# C++ Go Rust Dart TypeScript JavaScript CoffeeScript Ruby Python PHP Perl
リスト内の文字列を短い順に出力する(元のリストを変更しない) Java Groovy Kotlin Scala Erlang Haskell PowerShell F# C# C++ Go Rust Dart TypeScript JavaScript CoffeeScript Ruby Python PHP Perl
リスト内の文字列を短い順・辞書順に出力する(元のリストを変更して良い) Java Groovy Kotlin Scala Erlang Haskell PowerShell F# C# C++ Go Rust Dart TypeScript JavaScript CoffeeScript Ruby Python PHP Perl
リストから最も長い文字列を1つだけ取り出す Java Groovy Kotlin Scala Erlang Haskell PowerShell F# C# C++ Go Rust Dart TypeScript JavaScript CoffeeScript Ruby Python PHP Perl
リストから最も長い文字列を全て取り出す Java Groovy Kotlin Scala Erlang Haskell PowerShell F# C# C++ Go Rust Dart TypeScript JavaScript CoffeeScript Ruby Python PHP Perl
整数のリストから偶数だけを取り出す Java Groovy Kotlin Scala Erlang Haskell PowerShell F# C# C++ Go Rust Dart TypeScript JavaScript CoffeeScript Ruby Python PHP Perl
整数のリストを偶数と奇数とに分ける関数 Java Groovy Kotlin Scala Erlang Haskell PowerShell F# C# C++ Go Rust Dart TypeScript JavaScript CoffeeScript Ruby Python PHP Perl
リストから重複した要素を取り除く Java Groovy Kotlin Scala Erlang Haskell PowerShell F# C# C++ Go Rust Dart TypeScript JavaScript CoffeeScript Ruby Python PHP Perl
整数のリストの全要素を掛け算する Java Groovy Kotlin Scala Erlang Haskell PowerShell F# C# C++ Go Rust Dart TypeScript JavaScript CoffeeScript Ruby Python PHP Perl
整数のリストの各要素を桁区切りありの文字列に変換し、それらを全て連結する Java Groovy Kotlin Scala Erlang Haskell PowerShell F# C# C++ Go Rust Dart TypeScript JavaScript CoffeeScript Ruby Python PHP Perl
月の名前のリストからXMLを生成する Java Groovy Kotlin Scala Erlang Haskell PowerShell F# C# C++ Go Rust Dart TypeScript JavaScript CoffeeScript Ruby Python PHP Perl
フィボナッチ数列をエンドレスで生成する関数 Java Groovy Kotlin Scala Erlang Haskell PowerShell F# C# C++ Go Rust Dart TypeScript JavaScript CoffeeScript Ruby Python PHP Perl
国のリストと都市のリストを結合し、日本以外の都市をコード順に出力する Java Groovy Kotlin Scala Erlang Haskell PowerShell F# C# C++ Go Rust Dart TypeScript JavaScript CoffeeScript Ruby Python PHP Perl
ポーカーの手を判定する関数 Java Groovy Kotlin Scala Erlang Haskell PowerShell F# C# C++ Go Rust Dart TypeScript JavaScript CoffeeScript Ruby Python PHP Perl