左截断Scala函数 - 从整数列表

时间:2015-06-25 12:13:09

标签: function scala

我是Scala的全新人,你能帮我解决这个简单的功能 - input参数是一个整数,函数应该返回一个整数列表,第一个条目是输入整数,其余的是通过逐个省略最左边的数字得到的。例如,

如果输入为0,则返回List(0)input =5678返回List(5678,678,78,8)

def leftTrunc(input:Int):List[Int]

提前多多感谢

2 个答案:

答案 0 :(得分:2)

5678.toString.tails.toList.init.map(_.toInt)

//> res0: List[Int] = List(5678, 678, 78, 8)

将数字转换为字符串。然后tails完全按照您的意愿行事。除了它是一个迭代器,所以将它转换为List,并且它的末尾有一个空字符串,所以使用init返回除最后一个元素之外的所有元素。但它们是字符串,因此请使用map将它们全部转换为Int

但我很确定你的教练期待你用数字来做这件事:)

这是一个数字版本,在这种情况下故意取消注释,以便您可以自己解决它是如何工作的

val n = 5678 
val digits = n.toString.size
List.iterate(10, digits)(10*) map { n % _}  

编辑:正如评论中所要求的那样,反过来只使用inits而不是tails(反向获取请求的顺序)

5678.toString.inits.toList.init.reverse.map(_.toInt)
//> res0: List[Int] = List(5, 56, 567, 5678)

这个数字更容易这样

List.iterate(n, digits)(_/10).reverse 

答案 1 :(得分:0)

如果你分享你的尝试会很有趣,我们都可以尝试。 :)我希望你能得到一些,而且我的最终会有一些想法...

    $db = new SQLIte3('mysqlite.db');
    $table = 'mytable';

    $tableCol = getColName($db, $table);

    for ($i=0; $i<count($tableCol); $i++){
        echo "Column $i = ".$tableCol[$i]."\n";
    }           

    function getColName($db, $table){
        $qry = "SELECT * FROM $table LIMIT 1";
        $result = $db->query($qry);
        $nCols = $result->numCols();
        for ($i = 0; $i < $ncols; $i++) {
            $colName[$i] = $result->columnName($i);
        }
        return $colName;
    }