我对在rust上使用类型有疑问。我有一个类型为&mut Peekable<I>
的值,我想将其用作其他函数的输入值,而该函数将获得类型为&[u8]
的值。如何更改其类型?
答案 0 :(得分:2)
Peekable<I>
是一个迭代器,它提供了它所包装的迭代器中的元素(带有一个可以在前面窥视的扭曲,但这在这里不相关)。
&[u8]
是在内存中连续排列的一个字节片。
所以您有两个问题:
迭代器I
可以是任何东西。假设您是从I
之类的通用上下文中获得foo<I: Iterator>()
的,则需要确保迭代器给出u8
或可转换为u8
的内容。
Peekable
之后的数据不必存在于内存中。可以从例如(0..1000)
的范围中创建它,也可以在HashMap
上进行迭代,其中u8
的数据以随机方式散布。您需要将其复制到可确保连续布局的向量中。
首先,您需要使用where I: Iterator<Item=u8>
声明要使用u8
,或要求使用where I: Iterator<Item=impl Into<u8>>
将类型转换为let iterator = iterator.map(|el| el.into())
。然后,您将能够执行u8
来获得let vec: Vec<u8> = iterator.collect();
let slice = &vec[..];
元素的迭代器。
一旦有了这些,就可以将它们收集到一个向量中,并获得该向量的一部分:
<pre>
<?php
$newline = "\n";
$hit = 0;
$id = "id";
while ($hit < 10) {
$a = rand(0, 255);
$b = rand(0, 255);
$c = rand(0, 255);
$d = rand(0, 255);
$name = gethostbyaddr("$a.$b.$c.$d");
if (!strpos($name, $id) === false) {
print " " . "<a href=$name>$name</a>" . $newline;
$hit = $hit + 1;
}
}
print $newline;
print "Copyright Search Engine" . $newline;
?>