大o符号只是告诉我们,随着输入大小,算法所花费的时间如何增长。
它只告诉我们花费的时间如何渐近。这意味着您甚至无法得出与另一个输入大小所花费的时间相比,对于一个输入大小所花费的时间。给定一个实现的函数
不确定我需要做什么。请尝试过滤器proke == 1,groupby and count;
df.query("Stroke==1").groupby('Residence_type')['Stroke'].agg('count').to_frame('Stroke_Count')
Stroke_Count
Residence_type
Rural 3
Urban 2
如果您需要类别之间的差异,可以尝试以下操作
df1 =df.query("Stroke==1").groupby('Residence_type')['Stroke'].agg('count').to_frame('Stroke_Count')
df1.loc['Diff'] = abs(df1.loc['Rural']-df1.loc['Urban'])
print(df1)
Stroke_Count
Residence_type
Rural 3
Urban 2
Diff 1
Typescript只是不允许使用对象类型出于类型的安全原因将对象类型索引。
我会提供 colorStomood
一个明确的类型来解决此问题。
const colorsToMood: Partial<Record<TColor, string>> = {
Red: "Hunger",
Blue: "Calm"
}
这告诉Typescript, colorStomood
可以用任何 tcolor
成员索引。但是结果可能是未定义的
。
const resultingMood = colorsToMood[myColor];
// ^? const resultingMood: string | undefined
请修改您的Namesuffix文件:
nameSuffix:
- path: spec/tls/secretName
kind: Ingress
此解决问题
问题是在Chrome(和基于Chrome的浏览器)中 - 出于某种原因,有时会向我的服务器,有时向其他人提出请求。也许问题是DNS令人耳目一新,但是奇怪的是,即使Firefox已经获得了正确的信息,这种行为也可以连接几个小时。
→有关使用不同示例的异步行为的更一般说明,请参见 为什么我的变量是在我的变量之后不变的,为什么我将其修改在功能中吗? - 异步代码参考
→如果您已经理解了问题,请跳到以下可能的解决方案。
→如果您已经了解了问题
a in
这是一个类比,希望能使同步和异步流更清晰地之间有所不同:
同步
想象您打电话给朋友,并要求他为您寻找东西。尽管可能需要一段时间,但您在电话上等待太空,直到您的朋友给您所需的答案。
当您进行包含“正常”代码的函数调用时,也会发生同样的情况:
function findItem() {
var item;
while(item_not_found) {
// search
}
return item;
}
var item = findItem();
// Do something with item
doSomethingElse();
即使 FindItem
可能需要很长时间才能执行, var item = var item = findItem(); 必须等待,直到函数返回结果。
异步
出于同样的原因, 您再次致电您的朋友。但是这次您告诉他您很着急,他应该在手机上给您回电。您挂断电话,离开房子,做您计划做的任何事情。一旦您的朋友给您回电,您就会处理他给您的信息。
这就是您执行AJAX请求时发生的事情。
findItem(function(item) {
// Do something with the item
});
doSomethingElse();
执行并没有等待响应,而是立即继续执行,并且执行AJAX调用后的语句。为了最终获得响应,您提供了一个函数,一旦收到响应,a challback (请注意某件事?回电?)。在调用回调之前执行该呼叫之后的任何语句。
解决方案
包含JavaScript!的异步性质,而某些异步操作提供同步的对应物(“ Ajax”也是如此),通常不愿意使用它们,尤其是在浏览器上下文中。
你为什么问不好?
JavaScript在浏览器的UI线程中运行,任何长期运行的过程都会锁定UI,从而使其无反应。此外,JavaScript的执行时间有一个上限,浏览器将询问用户是否继续执行。
所有这些都导致了非常糟糕的用户体验。用户将无法分辨出一切工作正常。此外,对于连接缓慢的用户而言,效果会更糟。
在以下内容中,我们将查看三种彼此之间建立的不同解决方案:
- 承诺
ynnc/等待
(ES2017++,如果您使用的话,可在较旧的浏览器中使用transpiler或recenerator) - 回调(在节点中流行)
- 承诺
then()
(ES2015++)(如果您使用众多浏览器之一)承诺库)
所有这三个都在当前浏览器中可用,节点7+。
es2017+: async/等待
2017年发布的eCmascript版本引入了 stytax-level支持 sandtax-level support s syynchronigonous函数。借助 async
和等待
,您可以以“同步样式”编写异步。该代码仍然具有异步,但是阅读/理解更容易。
异步/等待
在承诺之上构建: async
函数始终返回承诺。 等待
“取消包裹”的承诺,并且如果拒绝承诺,则可以解决承诺的价值或丢弃错误。
重要:您只能在 async
函数或 en-us/doc/web/javaScript/guide/模块“ rel =“ noreferrer”> javascript模块。顶级等待
在模块之外不支持,因此您可能必须制作一个异步(立即调用函数表达式)启动 async
上下文,如果不使用模块。
您可以阅读有关 noreferrer“> async
和 等待
等待 在MDN上。
这是详细列出 delay 函数 finditem()
上面的示例:
// Using 'superagent' which will return a promise.
var superagent = require('superagent')
// This is isn't declared as `async` because it already returns a promise
function delay() {
// `delay` returns a promise
return new Promise(function(resolve, reject) {
// Only `delay` is able to resolve or reject the promise
setTimeout(function() {
resolve(42); // After 3 seconds, resolve the promise with value 42
}, 3000);
});
}
async function getAllBooks() {
try {
// GET a list of book IDs of the current user
var bookIDs = await superagent.get('/user/books');
// wait for 3 seconds (just for the sake of this example)
await delay();
// GET information about each book
return superagent.get('/books/ids='+JSON.stringify(bookIDs));
} catch(error) {
// If any of the awaited promises was rejected, this catch block
// would catch the rejection reason
return null;
}
}
// Start an IIFE to use `await` at the top level
(async function(){
let books = await getAllBooks();
console.log(books);
})();
当前浏览器和异步/等待。您还可以在 recenererator 的帮助下,通过将代码转换为ES5来支持旧环境。 ,例如 babel )。
让函数接受回调
一个回调是当函数1传递给函数2时。函数2可以在准备就绪时调用函数1。在异步过程的上下文中,每当完成异步过程时,都会调用回调。通常,结果将传递给回调。
在问题的示例中,您可以进行 foo
接受回调,并将其用作 Success
回调。因此,这
var result = foo();
// Code that depends on 'result'
将成为
foo(function(result) {
// Code that depends on 'result'
});
这里定义“内联”函数,但是您可以传递任何函数参考:
function myCallback(result) {
// Code that depends on 'result'
}
foo(myCallback);
foo
本身定义如下:
function foo(callback) {
$.ajax({
// ...
success: callback
});
}
callback
将参考我们传递给<<<的函数。代码> foo 我们调用它,然后将其传递给 Success
。即,一旦AJAX请求成功, $。ajax
将调用回调
,然后将响应传递给回调(可以使用 result> Result
来参考。 ,因为这就是我们定义回调的方式)。
您还可以在将响应传递给回调之前处理:
function foo(callback) {
$.ajax({
// ...
success: function(response) {
// For example, filter the response
callback(filtered_response);
}
});
}
使用回调编写代码比看起来更容易。毕竟,浏览器中的JavaScript是事件驱动的(DOM事件)。接收Ajax响应只是事件。
当您必须使用第三方代码时,可能会出现困难,但是只要考虑应用程序流程,就可以解决大多数问题。
ES2015+:
the a href =“ https://developer.mozilla.org/en-us/docs/web/javascript/Reference/global_object/global_objects/promise” rel =“ noreferrer”> Promise api ES2015),但它具有良好的浏览器支持也有许多库可以实现标准承诺API并提供其他方法来减轻异步功能的使用和组成(例如,)。
承诺是未来值的容器。当承诺收到值(已解决的)或取消(拒绝)时,它会通知所有想访问此值的“听众”。
比普通回调的优势在于,它们允许您将代码解除,并且更容易撰写。
这是使用承诺的示例:
function delay() {
// `delay` returns a promise
return new Promise(function(resolve, reject) {
// Only `delay` is able to resolve or reject the promise
setTimeout(function() {
resolve(42); // After 3 seconds, resolve the promise with value 42
}, 3000);
});
}
delay()
.then(function(v) { // `delay` returns a promise
console.log(v); // Log the value once it is resolved
})
.catch(function(v) {
// Or do something else if it is rejected
// (it would not happen in this example, since `reject` is not called).
});
.as-console-wrapper { max-height: 100% !important; top: 0; }
应用于我们的Ajax电话,我们可以使用这样的承诺:
function ajax(url) {
return new Promise(function(resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.onload = function() {
resolve(this.responseText);
};
xhr.onerror = reject;
xhr.open('GET', url);
xhr.send();
});
}
ajax("https://jsonplaceholder.typicode.com/todos/1")
.then(function(result) {
console.log(result); // Code depending on result
})
.catch(function() {
// An error occurred
});
.as-console-wrapper { max-height: 100% !important; top: 0; }
描述承诺提供的所有优势超出了此答案的范围,但是如果您编写新代码,则应认真考虑它们。它们提供了很好的抽象和您的代码分离。
有关承诺的更多信息: html5 rocks -javascript Promises promises 。
旁注:jQuery的延期对象
延迟对象标准化)。他们的行为几乎像承诺,但暴露了略有不同的API。
jQuery的每种AJAX方法已经返回一个“递延对象”(实际上是递延对象的承诺),您可以从函数中返回:
function ajax() {
return $.ajax(...);
}
ajax().done(function(result) {
// Code depending on result
}).fail(function() {
// An error occurred
});
侧面注意:promise gotchas new Chep
牢记承诺和递延对象只是容器 /em>对于未来的价值,它们不是价值本身。例如,假设您有以下内容:
function checkPassword() {
return $.ajax({
url: '/password',
data: {
username: $('#username').val(),
password: $('#password').val()
},
type: 'POST',
dataType: 'json'
});
}
if (checkPassword()) {
// Tell the user they're logged in
}
此代码误解了上述异步问题。具体来说, $。ajax()
在检查服务器上的“/密码”页面时不会冻结代码 - 它将请求发送到服务器,并且在等待时,它立即返回jQuery AJAX递延对象,而不是服务器的响应。这意味着如果
语句将始终获取此延期对象,请将其视为 true
,然后继续以用户登录。不好。
但是修复程序很容易:
checkPassword()
.done(function(r) {
if (r) {
// Tell the user they're logged in
} else {
// Tell the user their password was bad
}
})
.fail(function(x) {
// Tell the user something bad happened
});
不推荐:我提到的同步“ ajax”调用
,一些(!)异步操作具有同步的对应物。我不主张他们的用法,但为了完整的缘故,这是您执行同步呼叫的方式:
如果
直接使用 xmlhttprequest
对象,将 false
作为第三个参数作为 .open
。
jQuery
如果您使用 jquery ,您可以设置 async
选项 false
。请注意,由于jQuery 1.8,此选项是弃用。
然后,您可以仍然使用成功
回调,或访问 ResponseText
jqxhr对象:
function foo() {
var jqXHR = $.ajax({
//...
async: false
});
return jqXHR.responseText;
}
如果您使用任何其他jQuery ajax方法,例如 $。get
, $。 ,您必须将其更改为 $。ajax
(因为您只能将配置参数传递到 $。ajax
)。
抬头!无法同步 jsonp 请求。 JSONP本质上总是异步的(甚至不考虑此选项的另一个原因)。
您可以按以下方式使用Invoke-Command
Invoke-Command -ComputerName $env:COMPUTERNAME -ScriptBlock { [Security.Principal.WindowsIdentity]::GetCurrent().Name} -Credential domain\user
,该行可以使您可以运行此脚本
[Security.Principal.WindowsIdentity]::GetCurrent().Name
您可以通过将元标记更改为以下内容来添加不安全inline
。但是,我建议将其保持相同,只是通过单独的文件加载JS,因为更改标签会增加一些安全风险。由于某种原因,它被称为不安全。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline'">
<title>Hello World!</title>
</head>
<body>
<script>
console.log("Hello World"); // <-- this is the line causing problems
</script>
<h1>Hello World!</h1>
We are using Node.js <span id="node-version"></span>,
Chromium <span id="chrome-version"></span>,
and Electron <span id="electron-version"></span>.
</body>
</html>
选择合适的技术高度取决于与您的SLA相关的事物。诸如您的查询能有延迟多少?您的查询类型是什么?您的数据是否归类为大数据?数据可更新吗?我们期待晚期事件吗?我们将来是否需要历史数据,还是可以使用越野等技术?和这样的事情。为了澄清我的答案,可能是使用窗口功能可以解决问题。例如,您可以将数据存储在您提到的任何工具上,并使用Presto SQL引擎,您可以查询并获得所需的结果。但是并非所有人都是最佳的。此外,通常无法使用单个工具来解决这类问题。一组工具可以满足所有要求。
tl; dr。在下文中,我们找不到解决方案。它介绍了一种思考数据建模和选择工具的方法。
让我尝试对问题进行建模以选择单个工具。我认为您的数据无法更新,您需要一个较低的延迟响应时间,我们不会期望任何迟到事件,我们将面临必须将其保存为原始数据的大量数据流。
- 根据第一个和第二个要求,至关重要的是随机访问(似乎您想在特定ID上查询),因此诸如Parquet或orc文件之类的解决方案不是一个不错的选择。
- 基于最后的要求,必须基于ID对数据进行分区。第一个和第二个要求和最后的要求,都将ID视为标识符部分,看来没有其他字段(例如时间)像加入和全局订购一样。因此,我们可以选择ID作为分区器(物理或逻辑)和
atime
作为群集部分;对于每个ID,根据时间订购事件。 - 第三个要求有点模糊。您想产生所有数据吗?还是每个ID?
- 为了计算前三个条件,我们需要一个支持窗口功能的工具。
根据上述注释,似乎我们应该选择一个对随机访问查询有良好支持的工具。 Cassandra,Postgres,Druid,MongoDB和Elasticsearch等工具是我记得的事物。让我们检查一下:
- Cassandra:在随机访问查询上的响应时间非常好,可以轻松处理大量数据,并且没有单个失败点。但是可悲的是,它不支持窗口功能。另外,您应该仔细设计数据模型,似乎这不是我们可以选择的好工具(由于未来需要原始数据)。我们可以通过与卡桑德拉(Cassandra)一起使用Spark绕过其中的一些限制,但是目前,我们更喜欢避免在堆栈中添加新工具。
- Postgres:在随机访问查询和索引列上很棒。它支持窗口功能。我们可以将多个服务器的数据(水平分区)分解(通过选择ID作为碎片键,我们可以在计算上具有数据位置)。但是有一个问题:ID并非唯一;因此,我们不能选择ID作为主键,并且我们在随机访问中遇到了一些问题(我们可以选择ID和
atime
列(作为时间戳列)作为复合主键,但没有拯救我们)。 - 德鲁伊:这是一个很棒的OLAP工具。根据DRUID的存储方式(段文件),通过选择正确的数据模型,您可以在子秒中对大量数据进行分析查询。它不支持窗口功能,但是使用汇总和其他功能(例如
最早的
),我们可以回答我们的问题。但是,通过使用汇总,我们会丢失原始数据,我们需要它们。 - MongoDB:它支持随机访问查询和碎片。另外,我们可以在其计算框架上具有某种类型的窗口函数,我们可以定义某种用于进行聚合的管道。它支持上限收集,如果ID列的基数不高,我们可以使用它来存储每个ID的最后10个事件。看来此工具可以涵盖我们的所有要求。
- Elasticsearch:这对于随机访问非常好,也许是最伟大的。使用某种过滤器聚合,我们可以具有一种窗口函数。它可以通过碎片处理大量数据。但是它的查询语言很难。我可以想象我们可以用ES回答第一个和第二个问题,但是就目前而言,我无法在我的脑海中进行查询。与之找到正确的解决方案需要时间。
因此,MongoDB和Elasticsearch似乎可以回答我们的要求,但是有很多'如果在路上。我认为我们找不到使用单个工具的直接解决方案。也许我们应该选择多种工具,并使用复制数据之类的技术来找到最佳解决方案。
我发现了最终如何做!
感谢您的所有有用的评论,它可以帮助我找到解决问题的解决方案。
这是我的代码:
#define VIDEO_MEMORY 0xb8000
void PrintS(char *text, char color)
{
char *currentAddressVRAM = (char *)VIDEO_MEMORY;
for (int i = 0; 1; i++)
{
if (text[i] == '\0')
{
break;
}
*currentAddressVRAM++ = text[i];
*currentAddressVRAM++ = color;
}
}
唯一的问题是我不知道如何在功能的使用之间保存当前地址。如果有人知道,请告诉我!
您可以使用案例
创建table2(column1 int,column2 varchar(10))
插入表2值(1,'value1'),(2,'value1'),(13,'value2'),(44,'value2')
创建table1(column1 int)
插入表1值(1),(2),(13),(44)
选择 * 来自Table1 T1 加入T1.Column1 = T2.Column1上的Table2 T2 在哪里 当t1.column1在1到10和t2.column2之间的情况下 当t1.column1在11到20和T2.Column2中像'value2'一样 否则错误的结尾
column1 |列1 |列2 ------:| ------:| :------- 1 | 1 | Value1 2 | 2 | Value1 13 | 13 | Value2
db&lt;&gt;&gt;
您可以通过在脚本区域中添加以下cdn来使用同位JS库:
<script src="https://unpkg.com/isotope-layout@3/dist/isotope.pkgd.min.js"></script>
您仍然可以使用嵌套的画廊结构并使用同位素使用数据过滤器,也可以使用同位素,也可以正确地显示一个旁边的图像,当然也可以显示一个extrestope。仍将具有不会受到影响的相同网格结构。
<div class="container text-center pt-5">
<div class="row">
<div class="col-md-12">
<div class="filters">
<h4>Featured categories</h4>
<ul>
<li data-filter=".idea">Furniture <img class="dot" src="./images/dot.svg"
alt=""></li>
<li data-filter=".ui">lighting <img class="dot" src="./images/dot.svg"
alt=""></li>
<li data-filter=".ux">Accessories <img class="dot" src="./images/dot.svg"
alt=""></li>
<li data-filter=".code">Tailor-made objects <img class="dot"
src="./images/dot.svg" alt=""></li>
<li class="is-checked fp" data-filter="*">All</li>
</ul>
</div>
</div>
<div class="col-md-12">
<div class="rows grid data-isotope='{ "itemSelector": ".grid-item", "masonry":
{ "columnWidth": 200 } }'">
<div class="col-md-12 grid-item code">
<img class="img-fluid" src="./images/01.jpg" alt="">
</div>
<div class="col-md-4 grid-item ux ">
<img class="img-fluid img-grid" src="./images/02.jpg" alt="">
</div>
<div class="col-md-4 grid-item ui">
<img class="img-fluid img-grid" src="./images/03.jpg" alt="">
</div>
<div class="col-md-4 grid-item idea">
<img class="img-fluid img-grid" src="./images/04.jpg" alt="">
</div>
<div class="col-md-4 grid-item ux ">
<img class="img-fluid img-grid" src="./images/02.jpg" alt="">
</div>
<div class="col-md-4 grid-item ui">
<img class="img-fluid img-grid" src="./images/03.jpg" alt="">
</div>
<div class="col-md-4 grid-item idea">
<img class="img-fluid img-grid" src="./images/04.jpg" alt="">
</div>
<div class="col-md-4 grid-item ux ">
<img class="img-fluid img-grid" src="./images/02.jpg" alt="">
</div>
<div class="col-md-4 grid-item ui">
<img class="img-fluid img-grid" src="./images/03.jpg" alt="">
</div>
<div class="col-md-4 grid-item idea">
<img class="img-fluid img-grid" src="./images/04.jpg" alt="">
</div>
</div>
</div>
并使用以下脚本以及
var $grid = $('.grid').isotope({
// options
itemSelector: '.grid-item',
layoutMode: 'fitRows',
});
// change is-checked class on buttons
var $buttonGroup = $('.filters');
$buttonGroup.on( 'click', 'li', function( event ) {
$buttonGroup.find('.is-checked').removeClass('is-checked');
var $button = $( event.currentTarget );
$button.addClass('is-checked');
var filterValue = $button.attr('data-filter');
$grid.isotope({ filter: filterValue });
});
好运
我可能会误解您的逻辑,但是看起来您想获得所有false的
gg
值。如果是这种情况,则不需要使用
数据:
shift
列,只需ffill
和输出:
I might be misinterpreting your logic, but it looks like you want to get the
gg
values of the previous True for all False.If this is the case you do not need to use the
shift
column, simplyffill
andmask
the data:output:
如何将另一列的值用作DF的参数