文字列を特定の文字で区切って配列(リスト)に入れる処理は、標準入力などで頻繁に使います。ここで、この配列(リスト)の要素を文字列でなく数値として扱う場合は、全要素を数値型に変換する必要があります。
このような場合は、for文などで要素を1個づつ取り出して個別に数値化していく方法もありますが、全要素を一括して数値型に変換することも可能です。
今回は配列(リスト)の全要素をまとめて数値型に変換したり、同じ計算をするといった、配列(リスト)の一括操作を扱います。配列(リスト)の全要素を一括で操作する場合は、mapメソッド(C#の場合はSelectメソッド)を使用します。
文字列が要素となっている配列[“1″,”2″,”4″,”8″,”16″,”32″,”64″,”128”]の全要素を数値(整数)型に変換し、さらに全要素を2倍する操作を行い、操作後の全要素を出力する処理について、C#、Java、JavaScript、PHP、Python3、Rubyの6言語で書いてみました。
C#
using System;
using System.Linq;
using System.Collections.Generic;
public class Sample{
//配列の全要素をカンマ区切りで出力。
public static void listOutput(List<int> box){
int idx = 0;
foreach (int x in box){
Console.Write(x);
if (idx < box.Count-1){
Console.Write(", ");
} else {
Console.WriteLine();
}
idx += 1;
}
}
public static void Main(){
//配列をリスト型に変換。
List<string> testList = new List<string>{"1","2","4","8","16","32","64","128"};
//リストの全要素を整数化し、さらに全要素を2倍する。
List<int> nlist = new List<int>(testList.Select(x1 => int.Parse(x1)).Select(x2 => x2 * 2));
//リストの内容を出力。
listOutput(nlist);
}
}
全要素を一括して操作可能にするために、配列をリスト型に変換します。
リスト型に変換したら、Selectメソッドで要素を一括操作します。最初のSelectで整数型に変換し、2回目のSelectで全要素を2倍にします。
全要素の一括操作処理が済んだらリストnListに格納し、nListの内容をカンマ区切りで出力します。
Java
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
//配列をリスト型に変換。
List<String> testList = Arrays.asList("1","2","4","8","16","32","64","128");
//リストの全要素を整数化し、さらに全要素を2倍する。
var list = new ArrayList<Integer>();
testList.stream().map(x1 -> Integer.parseInt(x1)).map(x2 -> x2 * 2).forEach(y -> list.add(y));
//リストの内容を出力。
System.out.println(list);
}
}
全要素を一括して操作可能にするために、配列をリスト型に変換します。
リストの全要素一括操作は、stream()とmapの2つのメソッドを組み合わせて行います。操作を済ませたデータを格納するリストも用意しておきます。
リストにstream()を付け、その次のmapで全要素を一括して整数型に変換、2番目のmapで全要素を2倍にする操作を行います。そして、最後のforEachで、格納用リストlistに操作を済ませた全要素を格納します。
操作済のデータが入ったリストlistを、System.out.printlnで出力します。
JavaScript
var testArr = ["1","2","4","8","16","32","64","128"];
//配列の全要素を整数型に変換し、さらに全要素を2倍する。
var arr = testArr.map(x1 => parseInt(x1)).map(x2 => x2 * 2);
//配列の内容を出力。
console.log(arr);
配列にmapメソッドを付けることで、全要素を操作します。最初のmapで整数型に変換し、次のmapで全要素を2倍にします。
配列の一括操作が済んだら配列arrに格納し、配列arrの内容をconsole.logで出力。
PHP
<?php
$testArr = ["1","2","4","8","16","32","64","128"];
//配列の全要素を整数型に変換し、さらに全要素を2倍する。
$arr = array_map(function($x2){
return $x2 * 2;
}, array_map(function($x1){
return (int)$x1;
} ,$testArr));
//配列の内容を出力。
print_r($arr);
?>
配列の全要素の一括操作は、array_map(関数, 配列)を使用。
第1引数に整数型に変換する処理、第2引数に配列を入れて、全要素を一括して整数型に変換する処理を行います。さらに、この処理を第2引数に、数値を2倍する処理を第1引数に入れたarray_mapで、配列の全要素を一括して2倍にする操作を行います。
配列の全要素の一括操作を済ませたら配列$arrに格納し、print_rで配列$arrの内容を出力します。
Python3
testList = ["1","2","4","8","16","32","64","128"]
#リストの全要素を整数型に変換し、さらに全要素を2倍する。
nList = list(map(lambda x: x*2, map(int, testList)))
#リストの内容を出力
print(nList)
リストの全要素操作は、map(関数, リスト)を使います。
map(int, リスト)で全要素を整数型に変換し、その処理を第2引数に入れたmapで全要素を2倍します。全要素を2倍にする処理は、lambda x: x * 2を第1引数に入れることで実行できます。
リストの全要素操作が済んだらlistでリスト形式に戻して、リストnListに格納。printでリストnListの内容を出力します。
Ruby
testArr = ["1","2","4","8","16","32","64","128"]
#配列の全要素を整数型に変換し、さらに全要素を2倍する。
arr = testArr.map(&:to_i).map{|x| x * 2}
#配列の内容を出力。
p arr
配列にmapメソッドを付けて、全要素を操作。最初のmapで整数型に変換、2回目のmapで全要素を2倍します。
要素の操作が済んだら、配列arrに格納。pメソッドで配列arrの内容を出力します。